使用Python中的Turtle绘制分形树的右侧
我还是个初学者,正在用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)