Restauración del estado grabado en el código L-System utilizando gráficos de tortuga
-
26-10-2019 - |
Pregunta
Estoy usando gráficos de tortuga para reproducir los sistemas L (Biblioteca TurtleWorld). Las reglas que he tratado de aplicar funcionan bien cuando no implican volver a un estado guardado anterior, pero cada vez que hay una [y] (ver regla a continuación), las cosas se rompen y la tortuga simplemente atrae a BS aleatorio.
Básicamente, la declaración IF que verifica dónde está '' ', creo que se rompe el código, creo. (Además, sé que no está optimizado por el momento, he escrito un sólido si por el bien de la claridad ...)
Editar: nuevo código: todo este ángulo de cálculo no era necesario, ya que tenemos get_heading (), que nos informa sobre el ángulo en el que estamos orientados.
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()
Solución
Un par de ideas:
- Nunca te pusiste
angle
al nuevo ángulo (newa
) en tus]
-manipulador. - Su condicional está mal según el comentario,
newa>0
Giraría a la izquierda si el ángulo es positivo. - Está seguro
rt
maneja bien los ángulos negativos? - Puede simplificar mucho su código si usa
pop
En cambio, y empujó una tupla o una parte del estado. - Un índice de
-1
es igual alen(lst) - 1
.
Ejemplo de la pop
-sugerencia:
>>> state = []
>>> angle = 90
>>> posx = 10
>>> posy = 15
>>> state.append((angle, posx, posy))
>>> angle = 40
>>> angle, posx, posy = state.pop()
>>> angle
90