Письмо (перевод) из правил производства (теории) 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? Как вы говорите python, чтобы заменить набор команд X, рекурсивно? Я попытался создать две процедуры: одну для X и одну для F, но я не могу понять. Как вы можете заменить X другими словами, такими как (F + X + F) в примере? Есть ли прямой способ перевести это?

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

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

1 ответ

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

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

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

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

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

licensed under cc by-sa 3.0 with attribution.