使用Python中的Turtle绘制分形树的右侧

0 投票
1 回答
3373 浏览
提问于 2025-04-18 03:48

我还是个初学者,正在用Python的turtle库制作一个分形树,想通过写一个递归函数来实现。我觉得我写的函数能画出分形树的左边部分,但右边部分却画不出来。请问我该怎么解决这个问题?任何建议都非常感谢!

def svTree( trunkLength, levels ):
    """ uses the turtle drawing functions to return a tree with a specified number of levels
    input: two integers, trunkLength and levels
    """

    newtrunkLength = trunkLength *.5


    forward(trunkLength)

    if levels ==1:
           penup()


    else:
        left(45)         
        forward(trunkLength * 0.5)
        backward(trunkLength * 0.5)
        right(90)
        forward(trunkLength * 0.5)
        backward(trunkLength * 0.5)
        left(90)
        return svTree(newtrunkLength,levels-1)

1 个回答

1

在递归进入左边分支之前,先保存一下乌龟的位置,然后重置乌龟,再画右边的分支:

def svTree(length, level):
   if level == 1:
      return

   #draw level's trunk
   down()
   forward(length)
   up()

   #save turtle position and heading
   pos = position()
   hdg = heading()

   #draw left branch
   left(45)
   svTree(length / 2, level - 1)

   #restore turtle position and heading
   setposition(pos)
   setheading(hdg)

   #draw right branch
   right(45)
   svTree(length / 2, level - 1)

如果你不想在每次调用方法时都保存位置和方向,你也可以确保乌龟光标在每次方法调用结束时,位置和方向都和开始时一样。

def svTree(length, level):
    if level == 1:
        return

    #draw level's trunk
    down()
    forward(length)
    up()

    #draw left branch
    left(45)
    svTree(length/2, level-1)

    #draw right branch
    right(90)
    svTree(length/2, level-1)

    #return cursor to state when function called
    left(45)
    backward(length)

撰写回答