Python中10阶龙曲线
为什么我的龙曲线看起来不像龙曲线呢?
这是用Python实现的10阶龙曲线:
def setupForDragonCurve():
turtle.hideturtle()
turtle.tracer(1e3, 0)
turtle.penup()
turtle.goto(0, -turtle.window_height()/5)
turtle.pendown()
def generateDragonCurve(n, result='[FX]'):
for _ in range(n):
result = result.replace('Y', 'FX-Y')
result = result.replace('X', 'X+YF')
return result
def drawDragonCurve(cmds, size):
stack = []
for cmd in cmds:
if cmd=='F':
turtle.forward(size)
elif cmd=='-':
turtle.left(90)
elif cmd=='+':
turtle.right(90)
elif cmd=='X':
pass
elif cmd=='Y':
pass
elif cmd=='[':
stack.append((turtle.position(), turtle.heading()))
elif cmd==']':
position, heading = stack.pop()
turtle.penup()
turtle.setposition(position)
turtle.setheading(heading)
turtle.pendown()
else:
raise ValueError('Unknown Cmd: {}'.format(ord(cmd)))
turtle.update()
这是10阶龙曲线应该呈现的样子:
补充:这是我在1阶时得到的结果,曲线放大了一些:
1 个回答
1
当你运行
result = result.replace('Y', 'FX-Y')
result = result.replace('X', 'X+YF')
时,第二行会把第一行引入的X
替换掉。(另外,你用的替换规则不太对,但你似乎已经注意到了这一点。)
你需要以一种不会互相影响的方式来进行这些替换,可能可以通过合并步骤来实现。一个方法是使用re
模块更高级的替换功能。另一个方法是自己写一个替换的程序。你也可以在第一次替换时用一个不同于X
的字符,这样第二次替换就不会把它替换掉,然后再在第三步中把那个字符替换成X
。