2017-03-31 9 views
1

私はタートルグラフィックを使って再帰を介してフラクタルを作成しようとしていますが、何らかの理由で私のコードがタートルを元に戻さないようです。 タートル再帰のエラー

public static void sun(Turtle t, double radius) { 
for (int i = 0; i < 360; i++) { 
    t.forward(radius * .0174); 
    t.left(1); 
} 
    t.penup(); 
    t.left(90); 
    t.forward(radius); 
    //t.fill(); 
    t.pendown(); 
for (int i = 0; i < 8; i++) { 
    t.forward(2*radius); 
    t.backward(2*radius); 
    t.left(45); 
} 
t.penup(); 
t.backward(radius); 
t.right(90); 
t.pendown(); 
} 

public static void fractalSun(Turtle t, double r, int level) { 
int color; 
if (level == 0) { 
    t.color(255, 0, 0); 
    sun(t, r); 
} 
else { 
    sun(t, r); 
    t.left(90); 
    t.forward(r); 
    t.right(90); 
    t.forward(r * 2); 
    t.right(90); 
    fractalSun(t, r/4, level -1); 
    t.left(90); 
    t.backward(r * 2); 
} 
} 

コードのコンパイルが成功しますが、この画像を生成し、次のように私のコードは次のとおりです。 Screenshot

亀が各「太陽の何かのISN」の中央に復帰するために私の目標は次のようになりを働いている。

答えて

0

あなたの8スポークループは、スポークごとにペンを図の中央に置きます。ループの最後で、中央から順に、次のシーケンスを実行します。

t.penup(); 
t.backward(radius); 
t.right(90); 
t.pendown(); 

特に、1つの半径をバックアップします。私はそれがあなたの意図するところから降りてくるところだと思います。その行をドロップして、あなたの望む方向を再確認してください。あなたは大丈夫だと思います。

+0

@willizen、私は説明したようにこの仕事をすることができませんでしたか?この変更により、元に戻ったときに不足するという本来の問題が保持され、他のサブルーチンに変更が必要になります。私は、問題が方向性以上のものであると考えています。つまり、戻り値の計算に距離の「r/4」単位がありません。 – cdlane

0

sun()メソッドは、タートルを開始位置に戻しますが、fractalSun()メソッドは、図形の中央にカメを残します。したがって、fractalSun()がそれ自身を呼び出すかsun()を呼び出すかにかかわらず、調整が必要です。

変更sun()でこのコードの最後のブロック:ここでは少数の変化(主に削除)して、更新の修正です

t.penup(); 
t.backward(radius); 
t.right(90); 
t.pendown(); 

単に1文であるために:

// t.penup(); 
// t.backward(radius); 
t.right(90); 
// t.pendown(); 

ドロップ3行のコードfractalSun()から引数を最終関数呼び出しに変更します。

public static void fractalSun(Turtle t, double r, int level) { 

    if (level == 0) { 
     t.color(255, 0, 0); 

     sun(t, r); 
    } else { 
     sun(t, r); 

     // t.left(90); 
     // t.forward(r); 
     // t.right(90); 

     t.forward(r * 2); 
     t.right(90); 
     fractalSun(t, r/4, level - 1); 
     t.left(90); 
     t.backward(r * 2 + r/4); // added a term to the equation 
    } 
} 

OUTPUT

enter image description here

注:それは間違っていた場合、あなたが私のJavaコードを微調整する必要があるかもしれませんので、私はこの使用してPythonのカメをシミュレートしました。

+0

ああ、大丈夫です!ありがとうございました! – willizen

+0

@ willizen、私は、ほとんどの行が削除され、calcualtionが修正されたオリジナルのデザインに近づくようにこの回答を更新しました。 – cdlane