🐢 Черепашача графіка та L-системи

L-система (система Ліндемаєра) — паралельна перезаписуюча граматика, винайдена Арістідом Ліндемаєром у 1968 р. Починаючи з аксіоми і застосовуючи рекурсивно правила продукції, вона генерує рядки, які черепашка інтерпретує як команди руху: F (вперед), + (вліво), - (вправо), [ (зберегти стан), ] (відновити стан) — породжуючи фрактальні структури довільної складності. 🇬🇧 English

Пресети

Правила L-системи

Довжина рядка
Кроків малювання
Глибина стека
Час малювання

Як працюють L-системи

На кожній ітерації всі правила продукції застосовуються одночасно до кожного символу — рядок росте експоненційно. На ітерації 10 рядок Дракона містить 210 = 1024 кроки; на ітерації 14 — понад 16 000. Ключова ідея — самоподібність: кожен підсегмент Дракона рівня n схожий на весь Дракон рівня n−1. Фрактальний вимір кривої Коха: log(4)/log(3) ≈ 1.261; трикутника Сьєрпінського: log(3)/log(2) ≈ 1.585. L-системи широко використовуються для моделювання рослин, морських водоростей і у процедурній генерації ігрових рівнів.

Про цю симуляцію

Цей симулятор переписує рядок-аксіому за посимвольними правилами продукції (F, X, Y — або A/B для кривої Гільберта, G для трикутника Сьєрпінського) задану кількість ітерацій, а тоді передає отриманий рядок віртуальній черепашці: F/G рухають її вперед і малюють лінію, +/- повертають на кут із відповідного повзунка, а [/] зберігають і відновлюють позицію та напрямок черепашки в стеку — саме так утворюються розгалуження в пресетах «Папороть» і «Дерево». Шість пресетів — Дракон, Крива Коха, Сьєрпінський, Крива Гільберта, Папороть і Дерево — завантажують готові аксіоми, правила й кути, але кожне поле можна редагувати й створити власну L-систему.

🔬 Що показано

Наочне зростання рядка: уже на 10 ітерації Дракон має 1024 кроки малювання, а програма в реальному часі показує довжину рядка, кількість кроків, максимальну глибину стека (глибину розгалужень) та час малювання в мілісекундах.

🎮 Як користуватись

Оберіть пресет, щоб завантажити його аксіому й правила, або впишіть власні значення в поля «Аксіома», «Правило F», «Правило X» і «Правило Y». Рухайте повзунок «Кут» (1°–180°) і «Ітерації» (1–14), щоб змінити форму кривої, і натисніть «▶ Малювати» (або +/- Ітер. для швидких кроків). Перемикайте кольоровий режим «Веселка» (відтінок змінюється вздовж траєкторії) або «Моно» (одна фіолетова лінія).

💡 Чи знали ви?

Фрактальна розмірність Дракона дорівнює рівно 2 — тобто при великій кількості ітерацій він повністю заповнює площину, тоді як у сніжинки Коха вона log(4)/log(3) ≈ 1.261, а у трикутника Сьєрпінського — log(3)/log(2) ≈ 1.585.

Часті запитання

Що насправді роблять символи F, +, -, [ і ]?

F (і G, яка використовується лише в пресеті Сьєрпінського) наказує черепашці рухатись вперед на одну умовну одиницю, малюючи лінію. Символ + повертає черепашку ліворуч на кут, заданий повзунком «Кут», а − повертає її праворуч на такий самий кут. Дужка [ зберігає поточну позицію (x, y) і напрямок черепашки в стеку; дужка ] повертає останній збережений стан — саме так пресети «Папороть» і «Дерево» створюють бічні гілки.

Чому рядок так швидко стає таким довгим?

На кожній ітерації всі відповідні символи одночасно замінюються повним текстом правила (паралельне переписування), тому довжина рядка росте приблизно експоненційно з базою, заданою коефіцієнтом розширення правила. Пресет Дракона досягає 1024 кроків малювання на 10 ітерації й може перевищити 16 000 на 14-й — код має захисне обмеження на 2 000 000 символів.

У чому різниця між шістьма пресетами?

Дракон (аксіома FX, кут 90°) і Крива Коха (F--F--F, 60°) використовують просте однорядкове переписування; Сьєрпінський (F-G-G, 120°) чергує правила F і G; Крива Гільберта (аксіома A, 90°) використовує парні правила A/B для шляху, що заповнює простір; Папороть (аксіома X, 25°) і Дерево (аксіома F, 20°) додають дужки [ і ], створюючи розгалужені, схожі на листя форми замість однієї суцільної кривої.

Що саме змінюють режими «Веселка» і «Моно»?

«Веселка» призначає кожному намальованому сегменту відтінок кольору залежно від його позиції в загальній послідовності кроків (0–360°), утворюючи градієнт уздовж усієї кривої. «Моно» малює весь шлях однією фіолетовою лінією (#a78bfa) і, на відміну від «Веселки», розриває контур у кожній точці розгалуження, тож кожна гілка малюється окремим суцільним штрихом.

Чому «Ітерації» обмежені 14?

Тому що кожна ітерація приблизно подвоює або потроює довжину рядка залежно від набору правил, і суттєво вища кількість згенерувала б мільйони символів та кроків малювання, різко сповільнивши браузер. Повзунок «Ітерації» обмежений 14, а сам цикл побудови рядка додатково зупиняється раніше, якщо перезаписаний рядок перевищує 2 000 000 символів.