Написание (перевод) из правил производства L-Systems (теория) в графику черепахи Python (практика)

Проблема в том, что я не знаю, как начать писать код. Мне нужна отправная точка. Я знаю, как применить переписывающее производственное правило к одному параметру, например к кривой Коха. Проблема возникает, когда количество производственных правил больше одного, я имею в виду, например:

(Прокладка Серпинского)

G = {V, ω, P}
V = {F, X, +, -}
P1 (Production rule 1) = X --> F + X + F
P2 (Production rule 2) = F --> X - F - X

Мой вопрос: как вы интегрируете это в скрипт на python turtle? Как вы говорите Python, чтобы заменить набор команд X, рекурсивно? Я попытался создать две процедуры, одну для X и одну для F, но я не могу понять это правильно. Как вы можете заменить X другими словами, такими как (F + X + F) в примере? Есть ли прямой способ перевести это?

Мне так жаль, ребята, что я так потерян, для меня все еще довольно абстрактно, когда я думаю о рекурсивном программировании и фрактальных элементах...

Заранее спасибо!

1 ответ

Решение

Ну, для реализации на любом языке, вы должны перевести на термины языка. Одним из способов является использование строк символов, итерация и преобразование строк напрямую. Это приводит к большой строке для более высоких итераций. Затем выполните итерацию этой полученной строки и интерпретируйте символы как команды черепахи.

Вариант строки символов должен был бы использовать массив типа символа. Этот тот же самый подход расширения макроса все еще будет работать.

Другим способом было бы преобразовать продукцию в функции, которые выполняют графические вызовы напрямую и делают (взаимно) рекурсивные вызовы другим продуктам. Вам нужен какой-то способ контроля глубины рекурсии. Проще всего передать дополнительную переменную, которая увеличивается при каждом вызове, и сравнить ее с глобальной переменной max_depth в каждой производственной функции.

Другим способом было бы гибридизировать два вышеупомянутых подхода, использовать набор строк или массивов для моделирования L-системы и выполнить рекурсию в отдельной функции-обработчике (которая может быть одинаковой для многих различных L-систем, т. Е. Она абстрагирована). де-пара). Когда рекурсивный handle_production() функция обнаруживает depth == max_depth он интерпретирует символ как команду черепахи вместо повторения.

НТН. В ответах на мой вопрос о код-гольфе было представлено несколько разных подходов: "Извините, молодой человек, но это Черепахи!"

Другие вопросы по тегам