编程语言
首页 > 编程语言> > python – 使用乌龟图形在l系统代码中恢复记录状态

python – 使用乌龟图形在l系统代码中恢复记录状态

作者:互联网

我正在使用龟图来重现l系统(TurtleWorld库).我试图应用的规则在不涉及返回到先前保存的状态时工作得很好,但是每当有[和](参见下面的规则)时,事情就会中断并且乌龟只是随机抽取bs.

基本上,用于检查’]’存在位置的IF语句是我认为代码断开的地方. (另外,我知道目前还没有优化,为了清晰起见,我写了一个可靠的IF …)

编辑:新代码 – 这整个计算角度的东西是没有必要的,因为我们有get_heading(),它告诉我们我们所面向的角度.

import turtle

turtle.down()

n = 'F'

s1 = 'F'
s2 = 'FF-[-F+F+F]+[+F-F-F]'
#s3 = 'F'
#s4 = 'FF'

steps = 5

for i in range(steps):
    n = n.replace(s1,s2)
    #n = n.replace(s3,s4)

a = 25

x = []
y = []
angle = []

for i in n:
    if i == 'F':
        turtle.forward(2)
    if i == '+':
        turtle.left(a)
    if i == '-':
        turtle.right(a)
    if i=='[':
        x.append(turtle.xcor())
        y.append(turtle.ycor())
        angle.append(turtle.heading())
    if i==']':
        turtle.pu()
        turtle.setpos(x[len(x)-1],y[len(y)-1])
        turtle.right(turtle.heading())
        turtle.setheading(angle[len(angle)-1])
        x.pop()
        y.pop()
        angle.pop()
        turtle.pd()

解决方法:

一些想法:

>你永远不会在你的处理程序中将角度设置为新角度(newa).
>根据评论,您的条件是错误的,如果角度为正,则newa> 0会将其左转.
>你确定rt处理负角度吗?
>如果你使用pop代替,你可以大大简化你的代码,并推动一个元组或某些状态.
>索引-1等于len(lst) – 1.

pop-suggestion示例:

>>> state = []
>>> angle = 90
>>> posx = 10
>>> posy = 15
>>> state.append((angle, posx, posy))
>>> angle = 40
>>> angle, posx, posy = state.pop()
>>> angle
90

标签:python,turtle-graphics,l-systems
来源: https://codeday.me/bug/20190704/1380718.html