Java中的递归Sierpinski三角形?

时间:2019-10-27 19:53:08

标签: java

我需要创建一个程序来绘制n阶的Sierpinski三角形。为此,我有几种方法。高度,filledTriangle和sierpinski。我在左下角递归打印三角形方面取得了一些进展,但是现在我试图在右边创建三角形,但向上的效果不佳。我认为我的问题出在filledTriangle方法上,因为我不确定如何容纳所有具有不同顶点的三角形。

UrlFetchApp.fetch

3阶的Sierpinski三角形应如下所示:https://imgur.com/a/SOk8PBr 我的输出是这样的:https://imgur.com/a/i70uwgV

1 个答案:

答案 0 :(得分:0)

看看这个方法:

public static void sierpinski(int n, double x, double y, double length)
{
    filledTriangle(x, y, length);

    if (n == 1) {
        System.out.println("Done!");
    } else {
        filledTriangle(x, height(length)/2, length/2);
            x = x/2;
            length = length/2;
        filledTriangle(x, y, length);
        filledTriangle(3*x, y, length);
        n--;
        sierpinski(n, x, y, length);               
    }

}

您将减小的n和减半的length传递给sierpinski,但是您没有更改xy。这不是一个好方法。传递“当前”三角形的坐标会更好,并且您会知道每次绘制的三角形数量是原来的3倍。您每次都需要调用sierpinski 3次(除非必须结束该过程),绘制了一个sierpinski三角形。您只有一个sierpinski调用,这说明了为什么三角形的数量在每个深度上都不会增加三倍。您应该知道三角形点的事物坐标,并且知道每边的一半将是下一个深度中的点。