Вследствие чего неправильно исполняется 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)

