亲爱的更高级程序员, 我必须编写毕达哥拉斯树(见https://en.wikipedia.org/wiki/Pythagoras_tree_(fractal)),我想向前迈出一步,但我不能。
我想创建三角形的第三个点,但经过2天的书籍,互联网,我的头等搜索,我只是找不到解决方案。好吧,我有一个解决方案,但它不适用于递归步骤,我不知道如何创建以下方块的第3和第4点。
我希望我的程序能够绘制树的第1步。
到目前为止,这是我的计算代码:
public static void main(String[] args) {
double ax;
double ay;
double bx;
double by;
double cx;
double cy;
double dx;
double dy;
ax = 0.25;
ay = 0.75;
bx = 0.25;
by = 0.25;
cx = 0.75;
cy = 0.25;
dx = 0.75;
dy = 0.75;
StdDraw.line(ax,ay,bx,by); // ax etc. are doubles
StdDraw.line(bx,by,cx,cy);
StdDraw.line(cx,cy,dx,dy);
StdDraw.line(dx,dy,ax,ay);
double alpha;
double beta;
double random = 0.0;
while(random <= 0.3 || random >= 0.6){ //random angular between 30&60
random = Math.random();
}
random = random*100; //to make it an angular
alpha = random; //set alpha to this angular
beta = 90-alpha;
double sinusBeta= Math.toRadians(beta);
double sinusAlpha= Math.toRadians(alpha);
sinusBeta = Math.sin(sinusBeta);
sinusAlpha = Math.sin(sinusAlpha);
double side_b = 0.5*sinusBeta;
double side_a = 0.5*sinusAlpha;
double hypothenuse = Math.sqrt((side_b*side_b)+(side_a*side_a));
double p = (side_a*side_a)/hypothenuse; //to get h of the triangle
double q= (side_b*side_b)/hypothenuse;
double h = Math.sqrt(p*q);
double triangleTop_x = ax+q;
double triangleTop_y = ay+h;
StdDraw.line(ax, ay, triangleTop_x , triangleTop_y);
StdDraw.line(dx, dy, triangleTop_x , triangleTop_y);
}
我知道这不是获得最后一个三角形点的正确方法,因为它具有的条件是hypothenuse正好在x轴的方向上。对于第二步不再适用,因此递归方法不会表现得如此。我自己编写了所有代码,我知道它不是最好的代码,但是如果能够了解如何构建三角形并且后面的方块不依赖于方向,这将是非常棒的。 非常感谢你提出任何可能有用的想法!