Ця симуляція вирощує системи Ліндермаєра: рядок-аксіому переписують протягом кількох ітерацій за допомогою продукційних правил, де кожен символ паралельно замінюється на відповідний рядок-заміну. Підсумковий рядок читається як команди черепашачої графіки. F і G малюють сегмент уперед, плюс і мінус повертають на обраний кут, а квадратні дужки кладуть і знімають положення та напрямок черепашки зі стека, утворюючи розгалуження.
Меню пресетів завантажує десять класичних систем, як-от Фрактальна рослина, сніжинка Коха, крива Дракона, крива Гільберта та папороть у стилі Барнслі. Повзунок ітерацій задає глибину переписування, кут керує величиною повороту, а довжина лінії масштабує кожен сегмент. Кнопка «Малювати» рендерить результат, а «Анімувати ріст» поступово показує сегменти. L-системи лежать в основі процедурного моделювання рослин, дерев і природних розгалужень у графіці та біології.
Що таке L-система?
L-система, або система Ліндермаєра, — це формальна граматика, яка переписує початковий рядок, що називається аксіомою, багаторазово застосовуючи продукційні правила. Отриманий рядок інтерпретується геометрично, найчастіше як команди малювання черепашачої графіки. Її розробив біолог Арістід Ліндермаєр у 1968 році для моделювання росту рослин.
Як насправді працює переписування?
Кожна ітерація сканує поточний рядок і одночасно замінює кожен символ на праву частину його правила, залишаючи без змін символи, для яких правила немає. Наприклад, із правилом F на FF рядок F стає FF, потім FFFF і так далі. Саме ця паралельна підстановка відрізняє L-системи від звичайних послідовних граматик.
Що означають символи у правилах?
У цьому симуляторі F і G рухають черепашку вперед і малюють лінію, тоді як A і B рухають уперед без малювання для кривих, що заповнюють простір. Знаки плюс і мінус повертають напрямок праворуч і ліворуч на кут, а дужки кладуть і знімають стан черепашки, щоб створити розгалуження, які повертаються до збереженої точки.
Ітерації задають, скільки разів застосовуються правила, тож вищі значення дають експоненційно довші рядки та більше деталей. Кут — це величина повороту у градусах, що застосовується на кожному плюсі чи мінусі. Довжина лінії масштабує кожен сегмент уперед у пікселях, змінюючи загальний розмір, перш ніж вид автоматично впишеться у полотно.
Оскільки кожна ітерація може помножити довжину рядка на середній розмір правила, ріст приблизно експоненційний. Система з правилом F на FF подвоюється на кожному кроці, тож дев'ять ітерацій можуть дати сотні тисяч символів. Код обмежує рядки приблизно 1,5 мільйона символів, щоб браузер залишався чутливим.
Черепашача графіка — це модель малювання, у якій уявна черепашка рухається полотном, несучи перо. Команди наказують їй рухатися вперед, повертатися на кут або піднімати й опускати перо. Перетворюючи рядки L-системи на ці рухи, абстрактні послідовності символів стають видимими кривими та розгалуженими формами рослин.
Відкривна дужка зберігає поточне положення та напрямок черепашки у стек, а закривна дужка їх відновлює. Це дозволяє гілці вирости, а потім повернути черепашку туди, де гілка почалася, щоб могла початися сусідня гілка. Вкладені дужки створюють рекурсивне, самоподібне розгалуження, яке бачимо у пресетах Фрактальна рослина та Кущ.
Багато пресетів відтворюють справжні математичні фрактали, зокрема криву Коха, трикутник Серпінського, криву Дракона, криву C Леві та криву Гільберта, що заповнює простір. За нескінченних ітерацій вони мають чітко визначені фрактальні розмірності. На екрані ми рендеримо скінченне наближення, бо можна намалювати лише обмежену кількість кроків переписування.
Справжні рослини розвиваються через повторюване, самоподібне розгалуження, кероване локальними правилами росту, — саме це й кодують L-системи з дужками. Вибір ботанічно правдоподібних кутів близько 20–25 градусів і правил, що розгалужуються ліворуч і праворуч, імітує філотаксис та апікальний ріст, тож результат нагадує папороті, кущі й дерева.
L-системи широко застосовуються у комп'ютерній графіці для процедурного генерування дерев, листя та рослинності для фільмів і ігор, уникаючи потреби моделювати кожну рослину вручну. Вони також з'являються у біологічному моделюванні росту, у генеративному мистецтві та в алгоритмах синтезу правдоподібних дорожніх мереж і планувань міст.
Генеруйте математичні дерева та фрактали за допомогою систем Ліндемайєра (L-систем) — тієї ж формальної граматики, що описує розгалуження реальних рослин. Змінюйте правила — отримуйте нові органічні структури.
L-системи використовують правила переписування рядків, що застосовуються рекурсивно. Після 6–8 поколінь прості правила створюють структури, що дивовижно нагадують дерева, корали та папороті.
Виберіть пресет або введіть власні правила L-системи. Регулюйте кут гілки, глибину рекурсії і масштаб. Натисніть «Генерувати», щоб виростити дерево.
Біолог Арістід Ліндемайєр вигадав L-системи у 1968 році для моделювання клітинного поділу водоростей. Та ж формальна система описує бронхи легень (23 покоління розгалуження), річкові мережі і дендрити нейронів.