gpt4 book ai didi

java - 毕达哥拉斯树与 g2d

转载 作者:行者123 更新时间:2023-12-01 17:39:35 24 4
gpt4 key购买 nike

我正在尝试构建我的第一个分形(毕达哥拉斯树):

alt text http://img13.imageshack.us/img13/926/lab6e.jpg

在 Java 中使用 Graphics2D。这是我现在所拥有的:

import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
import java.util.Scanner;

public class Main {

public static void main(String[] args) {

int i=0;
Scanner scanner = new Scanner(System.in);

System.out.println("Give amount of steps: ");
i = scanner.nextInt();

new Pitagoras(i);
}
}

class Pitagoras extends JFrame {

private int powt, counter;

public Pitagoras(int i) {
super("Pythagoras Tree.");
setSize(1000, 1000);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
powt = i;
}

private void paintIt(Graphics2D g) {

double p1=450, p2=800, size=200;

for (int i = 0; i < powt; i++) {
if (i == 0) {
g.drawRect((int)p1, (int)p2, (int)size, (int)size);
counter++;
}
else{
if( i%2 == 0){
//here I must draw two squares
}
else{
//here I must draw right triangle
}
}
}
}

@Override
public void paint(Graphics graph) {

Graphics2D g = (Graphics2D)graph;
paintIt(g);

}

所以基本上我设置了步数,然后绘制第一个正方形(p1、p2 和大小)。然后,如果步骤是奇数,我需要在正方形的顶部构建直角三角形。如果步骤是偶数,我需要在三角形的自由边上构建两个正方形。现在我应该选择什么方法来绘制三角形和正方形?我正在考虑用简单的线条绘制三角形,然后用 AffineTransform 对其进行变换,但我不确定它是否可行,并且它不能解决绘制正方形的问题。

最佳答案

您不必在这棵树中绘制三角形,只需绘制正方形(正方形的边就是三角形)。

您可以使研究递归变得更加容易(这些类型的分形是递归的标准示例):

伪代码

drawSquare(coordinates) {
// Check break condition (e.g. if square is very small)
// Calculate coordinates{1|2} of squares on top of this square -> Pythagoras
drawSquare(coordinates1)
drawSquare(coordinates2)
}

由于我经常对分形进行编程,因此提示:在 BufferedImage 中绘制分形本身,并且仅在绘制方法中绘制图像。 Paint-Method 可能每秒被调用几次,所以它必须是 faaaaast。

也不要直接在 JFrame 中绘制,而是使用 Canvas(如果您想使用 awt)或 JPanel(如果您使用 swing)。

关于java - 毕达哥拉斯树与 g2d,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2713589/

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