2009-09-20 49 views
2

私はPythonのTurtleGraphicsに関連するこの質問に対していくつかの助けが必要です:Python TurtleGraphics - ランダムウォークをスムージングしますか?

tipsy_turtle()の小さなディテールは、カメが90度回転すると直ちに新しい方向に「ジャンプ」します。これは動きがギザギザに見える。タートルが回転するときにスムーズに動いたら、より良く見えるかもしれません。ですから、この質問では、turtle.right(d)関数を使用するのではなく、smooth_right(d)という新しい関数を書いて、以下のように動作する点を除いて、tipsy_turtle()と同じ関数smooth_tipsy_turtleここで

- If d is negative then 
     - repeat the following -d times: 
      - turn left 1 using the ordinary turtle.left command 

    - Otherwise, repeat the following d times: 
      - turn right 1 using the ordinary turtle.right command 

は、ランダムなカメの動きを得るために、私の本来の機能である:

ので
def tipsy_turtle(num_steps): 
    turtle.reset() 
    for step in range(num_steps): 
     rand_num = random.randint(-1, 1) 
     turtle.right(rand_num * 90) 
     turtle.forward(5 * random.randint(1, 3)) 

、どのように私は、この作品を作って行くのでしょうか?私が追加してみました:

if rand_num*90 < 0: 
     for step in range(rand_num*90): 
      turtle.left(rand_num*90) 
    else: 
     turtle.right(rand_num*90) 

をしかし、それは本当にうまくいかなかったと私は私が間違っていたかわかりません。ありがとう!

+0

申し訳ありませんが、あなたが望むものが私には完全にはっきりしていません。あなたは、前進する前にカメの乱数を回して(最大90)、カメの方向を変えながら "視覚的に回転"させたいが、移動する前に90度の増分で変えてもらいたいですか?また、どのバージョンのPythonを使用していますか?タートルモジュールは2.6の大幅なアップグレードを得ました。 –

答えて

2

このサンプルでは、​​あなたの例で何がうまくいかなかったのを願っています - rand_num*90*rand_num*90左折、またはrand_num*90右折のいずれかを実行してください。

if rand_num < 0: # don't need to multiply by 90 here - it's either +ve or -ve. 
    for step in xrange(90): # xrange is preferred over range in situations like this 
     turtle.left(rand_num) # net result is 90 left turns in rand_num direction 
else: 
    for step in xrange(90): 
     turtle.right(rand_num) 

それともとしてこれを記述することができます。このようなコードの場合

for step in xrange(90): 
    if rand_num < 0: 
     turtle.left(rand_num) 
    else: 
     turtle.right(rand_num) 

は、それは本当に好みの問題です。

+0

実際には、rand_numが正または負の値を取ることができれば、あなたは右折する必要があります。 (または左に回るだけです)turtle.right(-1)はturtle.left(1)と同じように動作します。少なくとも私が使用しているカメモジュール(WindowsではPython 2.6.1)です。 –

0

left-vs-rightの条件なしで実行できる場合があります。私はので、ここで擬似コード

turtle left randomly generated value 0 to 90 
turtle right randomly generated value 0 to 90 
turtle forward some amount 

だ、ダウンPythonの構文を持っていない、すなわち、ランダム角度を生成し、多くの場合、別のランダム角度を生成し、それだけで右折することを左折します。この方法では、負の無作為の生成を扱うことや負の無秩序を扱うことを心配する必要はありません。あなたはすべてのランダムな角度を正に保つことができます。そして、左と右の組み合わせは効果的に減算を行い、方向の変化に素敵なガウス分布を与えます。

+0

左または右を選択するよりも、負の乱数を扱うのが難しくありません。マーク・ルシャコフの答えに私のコメントで触れたように、負の量で右に回すことは、プラスの量だけ左に回すことと同じです。Pythonの乱数機能は、常にただ一つの方向を選択し、負の角度を許可する方が簡単です。 –

+0

ええ、私は知っている。私はそこから選択したい選択肢がある= – JustJeff

0

私はあなたが何を望んでいるかを完全には確信していないにもかかわらず、私は答えを念頭に置いていると思います。(質問に私のコメントを見てください。

タートルが90度ではなく90度以下である場合は、rand_num = random.randint(-90, 90)を、次にturtle.right(rand_num)を使用します。

関連する問題