0

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

4

0 回答 0