Вследствие чего неправильно исполняется L-System?

Реализация алгоритма:

for i in range(0, 3):
start1 = list(start)

print(start)

q += 1
for y in range(0, len(start1)):
    if 'F' == start1[y]:
        start1[y] = 'F[+F]F[-F]'

start = "".join(start1)

Отрисовка посредством библиотеки tyrtle

for x in start:
if x == 'F':
    turtle.forward(10)
if x == '-':
    turtle.left(25)
if x == '+':
    turtle.right(25)
if x == '[':
    save_pos = turtle.position()
    save_ugl = turtle.heading()

if x == ']':
    turtle.setposition(save_pos[0], save_pos[1])
    turtle.setheading(save_ugl)

Результат: скриншот результата алгоритма

Ожидаемый результат: скриншот ожидаемого результта

Где я ошибся? Более простые реализации (Дракон Хартера, Кривая Гильберта) работают исправно и без ошибок на том же алгоритме, лишь с другими правилами.


Ответы (1 шт):

Автор решения: Danis

вы должны сохранять все позиции а не только предыдущие

pos, angle = [], []

for x in start:
    if x == 'F':
        turtle.forward(10)
    if x == '-':
        turtle.left(25)
    if x == '+':
        turtle.right(25)
    if x == '[':
        pos.append(turtle.position())
        angle.append(turtle.heading())
    
    if x == ']':
        pos0 = pos.pop()
        angle0 = angle.pop()
        turtle.setposition(pos0[0], pos0[1])
        turtle.setheading(angle)
→ Ссылка