gpt4 book ai didi

java - 在 Java 中绘制线条

转载 作者:搜寻专家 更新时间:2023-10-30 19:56:18 27 4
gpt4 key购买 nike

如何在 java 中绘制这样的图形?

enter image description here

这是我的代码,它至少要画出这个图的一半

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JComponent;
import javax.swing.JFrame;

public class Main {
public static void main(String[] a) {
JFrame window = new JFrame();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setBounds(30, 30, 300, 300);
window.getContentPane().add(new MyCanvas());
window.setVisible(true);
}
}

class MyCanvas extends JComponent {
private static final long serialVersionUID = 1L;

public void paint(Graphics g) {
int i =0;

for ( i = 0; i < 100; i++) {
int x=1+i*3;
g.drawLine(x, 200, 2+(x+(i/2)), 400-((i*i)/20));
}
}
}

我得到了这个。

enter image description here

最佳答案

一个小动画向您展示了您需要寻找的关于线旋转的逻辑。将这条线想象成时钟上的指针。如何为时钟上的一只手制作动画。这几乎是完全相同的概念。唯一的区别是 x1(时钟指针中心点的 x 点)不是保持静止,而是沿着 x 轴(即y1 常量),而手正在转动。因此,对于时钟的每个滴答声(指针旋转),x 位置也会水平移动。我就是这么看的。

enter image description here

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;

public class Main {

public static void main(String[] a) {

JFrame window = new JFrame();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setResizable(false);
window.getContentPane().add(new MyCanvas());
window.pack();
window.setVisible(true);
}
}

class MyCanvas extends JPanel {

int x1 = 0;
int rotate = 50;

List<Line> lines;

Timer timer = null;
public MyCanvas() {
lines = new ArrayList<>();

timer = new Timer(75, new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (rotate < -50) {
((Timer) e.getSource()).stop();
} else {
lines.add(new Line(x1, rotate));
repaint();
x1 += 5;
rotate--;
}
}
});

JButton start = new JButton("Start the Magic");
start.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
timer.start();
}
});
add(start);

}

public Dimension getPreferredSize() {
return new Dimension(502, 400);
}

private static final long serialVersionUID = 1L;

public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLACK);
g.fillRect(0, 0, getWidth(), getHeight());
for (Line line : lines) {
line.drawLine(g);
}

}

class Line {

int x1;
int rotate;
int y1 = 200;

public Line(int x1, int rotate) {
this.x1 = x1;
this.rotate = rotate;
}

void drawLine(Graphics g) {
int Radius = (int) (Math.min(getWidth(), getHeight()) * 0.4);

int sLength = (int) (Radius * 0.9);
int xSecond = (int) (x1 + sLength * Math.sin(rotate * (2 * Math.PI / 100)));
int ySecond = (int) (y1 - sLength * Math.cos(rotate * (2 * Math.PI / 100)));
g.setColor(Color.GREEN);
g.drawLine(x1, y1, xSecond, ySecond);
}
}
}

关于java - 在 Java 中绘制线条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21800466/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com