gpt4 book ai didi

java - 平滑地制作分形树的动画

转载 作者:行者123 更新时间:2023-12-01 14:43:41 25 4
gpt4 key购买 nike

我有一个 Java 程序,它将基于递归方法绘制分形树,我想让它看起来平滑生长,但我不知道如何做到这一点。

以下是我的代码。这是一项学校作业,只是为了让大家知道这一点,但基本作业只是画一棵分形树,我已经完成了,动画是次要的,更多的是我希望实现的个人目标。

package Question4;

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 FractalTree1 extends Canvas {

// fields for drawing
private JFrame frame;
private final int WINDOW_WIDTH = 1280;
private final int WINDOW_HEIGHT = 720;

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

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

@Override
public void paint(Graphics g) {
g.setColor(Color.green);
drawFractalTree(g, WINDOW_WIDTH / 2, WINDOW_HEIGHT - 75, -90, 11);
}

public void drawFractalTree(Graphics g, int x1, int y1, double angle, int depth) {
if (depth == 0) {
} else {
int x2 = x1 + (int) (Math.cos(Math.toRadians(angle)) * depth * 10.0);
int y2 = y1 + (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(x1, y1, x2, y2);

drawFractalTree(g, x2, y2, angle + 30, depth - 1);
drawFractalTree(g, x2, y2, angle - 30, depth - 1);
}
}
}

编辑作为现在的后续......当我向其中添加 Thread.sleep() 时,它看起来很尴尬,因为这就是递归绘制它的方式。是否可以强制它从“树干”向上绘制,以便模拟实际的树“生长”?

最佳答案

要使其正常工作,您可能需要使用 double buffering 。本质上,您在屏幕外缓冲区上进行绘制,并在绘制完成后将其刷新到屏幕上。

在你的drawFractalTree()方法中,你必须添加一个Thread.sleep()调用来延迟绘制。直接在 g2d.drawLine(x1, y1, x2, y2); 之后添加它应该可以解决问题。它最终可能会非常慢。为了遏制这种情况,您可以使用计数器并在每 10 次调用后 hibernate 1 毫秒。

关于java - 平滑地制作分形树的动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15682903/

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