2017-02-05 9 views
0

四角形を再帰的に描画するのに問題があります。私の質問は、再帰的に呼び出すときに私のdraw_squares関数に渡されるべき長さです。元の正方形内に正しく収まるように思えます。添付された出力の例を見つける。 Output examplePythonで再帰的に四角形を描画する

draw_squares(side_size, depth): 
    turtle.forward(side_size) 
    turtle.left(90) 
    turtle.forward(side_size) 
    turtle.left(90) 
    turtle.forward(side_size) 
    turtle.left(90) 
    turtle.forward(side_size) 
    turtle.left(90) 
    if depth > 1: 
     turtle.penup() 
     turtle.left(90) 
     turtle.forward(side_size * 1/2) 
     turtle.right(90) 
     turtle.pendown() 
    else: 
     pass 

#Draw diagonal squares within original square 

def draw_squares2(side_size, depth): 
    if depth > 1 and depth % 2 == 0: 
     turtle.right(45) 
     draw_squares(side_size * 1/3, depth - 1) 
+1

ジオメトリについて[基本](http://mathworld.wolfram.com/PythagorassConstant.html)[knowledge](https://en.wikipedia.org/wiki/Square#Other_facts)が役立つかもしれません。 – mkrieger1

+0

[この機能](https://docs.python.org/2/library/math.html#math.sqrt)を使用する必要があります。 – mkrieger1

答えて

2

まず、あなたはここで再帰的四角形を描画していない:draw_squares2は、それ自体またはその親を呼び出すことはありませんのみdraw_squaresを呼び出します。再帰関数は、それ自体を直接的または間接的に呼び出します。あなたが再帰的な解決策(片側の中央に亀を動かす)に取り組んでいるように見えますが、あなたはまだそこにいません。

あなたの投稿にリンクした写真は、上記のコードと一致していないようです。まだ...

他の人が指摘しているように、基本的な形状は45度の角度で別の正方形に刻まれた正方形の辺の長さは何ですか?あなたが必要とする長さは、sqrt(2)/ 2倍で、親の正方形の側の長さです。

この値の使用方法を記録しておきます。あなたのプログラムは2倍することになります。printステートメントをクリティカルポイントで使用して計算をトレースしてみてください。

1

posedとしての問題は再帰的ではありませんが、そうである可能性があります。

from turtle import Turtle, Screen 

colors = ["navy", "gold"] 

STAMP_UNIT = 20 

def draw_figure(turtle, side_size, depth): 
    turtle.turtlesize(side_size/STAMP_UNIT) 
    turtle.color(colors[depth % 2], "white") 
    turtle.stamp() 

    if depth < 1: 
     return 

    turtle.forward(side_size/4) 

    turtle.left(45) 
    draw_figure(turtle, side_size/2/2**0.5, depth - 1) 
    turtle.right(45) 

    turtle.backward(side_size/2) 

    turtle.left(45) 
    draw_figure(turtle, side_size/2/2**0.5, depth - 1) 
    turtle.right(45) 

    turtle.forward(side_size/4) # return to starting point 

yertle = Turtle(shape="square", visible=False) 
yertle.penup() 

draw_figure(yertle, 240, 3) 

screen = Screen() 

screen.exitonclick() 

深さ3で、我々が得る:

enter image description here私は解決策を、あなたのに直接変換できないながらアプローチを描く、スタンピングを用いて以下の例のアプローチを書いたあなたのアイデアを与える必要はありません

しかし、1に深さを設定する私たちの問題のオリジナルフィギュアを取得します。

enter image description here

関連する問題