Python 巨蟒10级龙曲线
为什么我的龙形曲线看起来不像龙形曲线 以下是python中的10阶实现:Python 巨蟒10级龙曲线,python,turtle-graphics,l-systems,Python,Turtle Graphics,L Systems,为什么我的龙形曲线看起来不像龙形曲线 以下是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]'): f
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的外观:
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()
编辑:以下是我使用1阶得到的结果,具有更大比例的曲线:
当你跑步时
result = result.replace('Y', 'FX-Y')
result = result.replace('X', 'X+YF')
第二行替换第一行引入的X
s。(此外,您使用了错误的替换规则,但您似乎已经注意到了这一点。)
您需要以这样一种方式执行这些替换,即它们不会相互影响,可能是通过组合步骤来执行。一种方法是使用
re
模块的更高级替换功能。另一种方法是编写自己的替换例程。您还可以在第一次替换中使用除X
以外的字符,这样第二次替换不会拾取该字符,然后在第三次替换中使用X
替换该字符。您尝试过低阶曲线吗?这样看问题可能更容易。我的意思是,像,1号订单。把它简化到你看到问题的最简单的情况。看来我可能把绘图功能实现错了?我不确定,我能画出完美的分形植物和奔腾的雪花。。。但我就是搞不懂这个:(我想我明白了…我搞砸了,我想维基有一条规则错了…我没有用“X”->“X+YF+”而是用“X”->“X+YF”Nvm…还是错了…你认为我的规则可能有问题吗?我卡住了:/除了规则之外真的没有什么可以检查的了,对吗?