亲爱的更高级的程序员,我必须编写毕达哥拉斯树(见: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);
}
我知道这不是获得最后一个三角形点的正确方法,因为它的条件是斜边正好在 x 轴的方向上。这对于第二步不再适用,因此递归方法不会按应有的方式运行。我自己编写了所有代码,我知道这不是最好的,但是了解如何构建三角形和以下不依赖于方向的正方形会很棒。非常感谢您提供任何可能有帮助的想法!