为什么我的龙曲线看起来不像龙曲线?
这是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,其中包含更大的缩放曲线:
答案 0 :(得分:1)
运行时
result = result.replace('Y', 'FX-Y')
result = result.replace('X', 'X+YF')
第二行替换第一行引入的X
。 (另外,你使用了错误的替换规则,但你似乎已经注意到了。)
您需要以不相互影响的方式执行这些替换,可能是通过组合步骤完成这些替换。一种方法是使用re
模块的更高级替换功能。另一种方法是编写自己的替换例程。您还可以在第一次替换中使用X
以外的字符,因此第二个替换不会拾取它,然后在第三次传递中将该字符替换为X
。