递归绘图

时间:2012-01-18 11:34:01

标签: java algorithm

我不能让这个koch雪花画递归递送。

递归方法

 public void koch(int n, double size) {
    if (n == 0) {
        t.forward(size);
    } else {

        koch(n - 1, size / 3);   // line 1
        stdTort.rotate(60);            // line 2
        koch(n - 1, size/3);     // line 3
        stdTort.rotate(120);           // line 4
        koch(n - 1, size/3);     // line 5
        stdTort.rotate(60);            // line 6
        koch(n - 1, size/3);     // line 7
    }
}

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

你所有的角度都是错误的,因为它们顺时针旋转,你希望它们逆时针旋转。为了获得图2中所示的角度,你实际上需要旋转120而不是60.然后要获得你想要旋转的最后一行-60,而不是60.

    koch(n - 1, size / 3);   // line 1
    t.rotate(120);            // line 2
    koch(n - 1, size/3);     // line 3
    t.rotate(120);           // line 4
    koch(n - 1, size/3);     // line 5
    t.rotate(-60);            // line 6
    koch(n - 1, size/3);     // line 7

考虑到这一点,我认为你感到困惑的原因是因为旋转似乎并不直观。如果你的乌龟向前走去做第一行,那么你会期望从那个方向顺时针或逆时针旋转。但似乎你的轮换都是从相反的方向开始的。

预期:

        /
-60 = --

+60 = --
        \

实际值:

-60 = --
       /

       \
+60 = --

答案 1 :(得分:0)

如果逆时针旋转它,则需要t.rotate(-120);