Python TurtleGraphics - 平滑随机游走?

时间:2009-09-20 01:03:38

标签: python

我需要一些关于Python中TurtleGraphics的问题的帮助:

tipsy_turtle()的一个小细节是,当龟转90度时,它会立即“跳跃”到新的方向。这使它的运动看起来像是锯齿状的。如果乌龟在转弯时平稳移动可能看起来更好。因此,对于这个问题,编写一个名为smooth_tipsy_turtle()的函数与tipsy_turtle()相同,除了使用turtle.right(d)函数,编写一个名为smooth_right(d)的全新函数,其工作方式如下:

 - 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)

但它并没有真正解决,我不知道我做错了什么。谢谢!

3 个答案:

答案 0 :(得分: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)

对于这样的代码,这确实是一个偏好的问题。

答案 1 :(得分:0)

你可能没有左 - 右 - 右的条件。我没有python语法,所以这里是伪代码

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

即,生成一个随机角度并向左转那么多,然后生成另一个随机角度并向右转那么多。这样您就不必担心生成或处理负数。你可以保持所有随机角度为正,左边和右边的组合有效地为你做一个减法,这给出了方向变化的一个很好的高斯分布。

答案 2 :(得分:0)

我想我会冒险回答,即使我不完全确定你想要什么(请参阅我对这个问题的评论,如果我编辑这个答案,请不要感到惊讶!)。

假设您希望乌龟在每一步都转动一定数量的度数,不一定是90度,但不能超过90度,那么只需使用rand_num = random.randint(-90, 90)然后使用turtle.right(rand_num)