Java中的毕达哥拉斯树:如何计算三角形的第三个点?

时间:2017-01-15 22:57:14

标签: java tree point pythagorean

亲爱的更高级程序员, 我必须编写毕达哥拉斯树(见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轴的方向上。对于第二步不再适用,因此递归方法不会表现得如此。我自己编写了所有代码,我知道它不是最好的代码,但是如果能够了解如何构建三角形并且后面的方块不依赖于方向,这将是非常棒的。 非常感谢你提出任何可能有用的想法!

0 个答案:

没有答案