gpt4 book ai didi

Java 2D 图形 : Animate Fractal tree

转载 作者:行者123 更新时间:2023-12-01 18:34:13 25 4
gpt4 key购买 nike

我正在尝试绘制一棵分形树。

它会绘制树,但我想制作一个动画,以便树可以从它的“树干”中生长?还有可能让动画变得流畅吗?

如果我使用 Thread.sleep 方法,它会绘制出非常奇怪的树。

谁能帮助我?非常感谢

这是我的代码:

import java.awt.BasicStroke;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;

import javax.swing.JFrame;

public class FractalTree extends Canvas {

private JFrame frame;

//Breedte en hoogte voor GUI
private final int WINDOW_WIDTH = 1280;
private final int WINDOW_HEIGHT = 720;

public FractalTree() {
frame = new JFrame("Fractal Tree");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
frame.setLocationRelativeTo(null);
frame.setResizable(false);
frame.add(this);
frame.setVisible(true);
}

public static void main(String[] args) {
FractalTree ft = new FractalTree();
ft.setVisible(true);
ft.setBackground(Color.black);
}


class FractalPanel extends JPanel implements ActionListener {

private int x;
private int y;
private int xNew;
private int yNew;
private double angle;
private int depth;

public FractalPanel() {
setBackground(Color.black);
Timer timer = new Timer(200, this);
}

public void paintComponent(Graphics g) {
g.setColor(Color.cyan);
drawFractalTree(g, WINDOW_WIDTH / 2, WINDOW_HEIGHT - 75, -90, 11);
}

public void drawFractalTree(Graphics g, int x, int y, double angle, int depth) {

if (depth == 0) {
} else {

int xNew = x + (int) (Math.cos(Math.toRadians(angle)) * depth * 10.0);
int yNew = y + (int) (Math.sin(Math.toRadians(angle)) * depth * 10.0);

Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

g2d.setStroke(new BasicStroke(0.5f * depth));
g2d.drawLine(x, y, xNew, yNew);

drawFractalTree(g, xNew, yNew, angle + 30, depth - 1);
drawFractalTree(g, xNew, yNew, angle - 30, depth - 1);
}
}


public void actionPerformed(ActionEvent e) {
if (depth == 0) {
} else {

int xNew = x + (int) (Math.cos(Math.toRadians(angle)) * depth * 10.0);
int yNew = y + (int) (Math.sin(Math.toRadians(angle)) * depth * 10.0);
repaint();
}

}

}}

PS:对不起我的英语

最佳答案

不要混合使用 swing 和 awt(CanvasJFrame)。您可以扩展 JPanel 并重写 paintComponent(Grahics g) 方法,而不是使用 Canvas ,您可以在其中完成所有绘图。

不要在绘制中调用Thread.sleep(10);。它只是阻止事件调度程序线程并阻止绘制。

而是创建一个计时器,以便在每个所需的时间间隔内调用。在计时器的操作中更改模型(x、y 等)并调用 repaint() 以反射(reflect)更改。

关于Java 2D 图形 : Animate Fractal tree,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22756639/

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