Восстановление записанного состояния в коде L-System с использованием графики черепах
-
26-10-2019 - |
Вопрос
Я использую графику черепах для воспроизведения L-Systems (библиотека Turtleworld). Правила, которые я пытался применить работу хорошо, когда они не включают возвращение к предыдущему сохраненному состоянию, но всякий раз, когда есть [и] (см. Правило ниже), все сломается, а черепаха просто рисует случайную BS.
По сути, оператор 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()
Решение
Пара идей:
- Ты никогда не устанавливаешь
angle
к новому углу (newa
) в твоей]
-Дадлер. - Ваш условной неверен в соответствии с комментарием,
newa>0
повернет его влево, если угол положительный. - Ты уверен
rt
хорошо обрабатывает негативные углы? - Вы можете много упростить свой код, если используете
pop
Вместо этого и толкнул кортеж или что -нибудь из государства. - Индекс
-1
равноlen(lst) - 1
.
Пример pop
-предложение:
>>> state = []
>>> angle = 90
>>> posx = 10
>>> posy = 15
>>> state.append((angle, posx, posy))
>>> angle = 40
>>> angle, posx, posy = state.pop()
>>> angle
90
Не связан с StackOverflow