Фракталы Начальный

Фракталы деревьев: L-системы и правило ветвления

Линденмайер открыл в 1968 году: любое дерево можно записать как строку символов с правилами замены. Нарисуем дерево вручную, сгенерируем кодом (10 строк Python), измерим реальное дерево и найдём золотой угол в природе.

Длительность
2–4 часа
Бюджет
0–100 ₽
Возраст
10–99 лет
Сложность
Начальный
#фракталы #L-системы #Линденмайер #золотой-угол #ветвление #Леонардо-да-Винчи #самоподобие #биология #Python

Схема носит иллюстративный характер и может содержать упрощения. Если вы заметили неточность — воспользуйтесь кнопкой обратной связи.

Фракталы деревьев: L-системы и правило ветвления

В 1968 году биолог Аристид Линденмайер пытался описать рост водоросли Anabaena catenula. Он придумал формальный язык замены символов — и неожиданно обнаружил, что им можно описать любое растение. Любое дерево — это программа из нескольких строк.

Место в нарративной оси

Фракталы — это мост между математикой и жизнью. Мандельброт показал, что природа не знает прямых линий: береговые линии, горы, облака, сосуды — всё самоподобно на разных масштабах. Дерево — идеальный объект для изучения: его можно описать символами, нарисовать от руки, запрограммировать, измерить на улице. Золотой угол ветвления 137,5° — то же число, что в подсолнухе и ракушке наутилуса.

Часть 1: Что такое L-системы

Система Линденмайера

L-система — это:

  1. Алфавит: символы с определёнными действиями
  2. Аксиома: начальная строка
  3. Правила замены: как заменять символы на каждом шаге

Стандартный алфавит «черепашьей графики»:

СимволДействие
FШаг вперёд с рисованием
fШаг вперёд без рисования
+Повернуть влево на угол δ
-Повернуть вправо на угол δ
[Запомнить позицию и направление
]Вернуться к запомненной позиции

Простейшее дерево

Аксиома: F Правило: F → F[+F]F[-F]F Угол δ: 25.7°

Итерации:

Шаг 0: F
Шаг 1: F[+F]F[-F]F
Шаг 2: F[+F]F[-F]F[+F[+F]F[-F]F]F[+F]F[-F]F[-F[+F]F[-F]F]F[+F]F[-F]F
Шаг 3: (строка ~200 символов)
Шаг 4: (~1000 символов)
Шаг 5: (~5000 символов → визуально — дерево!)

Симметричное и случайное деревья

Симметричное (δ = 22.5°):

  • Аксиома: X
  • X → F+[[X]-X]-F[-FX]+X
  • F → FF

Случайное (добавить вероятность к правилу):

  • С вероятностью 0.7: F → F[+F]F[-F]F
  • С вероятностью 0.3: F → F[-F]F → каждый раз — уникальное дерево, как в природе

Опыт 1: Нарисовать дерево вручную

Время: 30–45 минут Материалы: лист A3, карандаш, линейка, транспортир

Задание: пройти 3 итерации правила F → F[+F]F[-F]F с δ = 30°.

Техника:

  1. Нарисуйте вертикальный отрезок 8 см — это F (ствол, уровень 0)
  2. По правилу замены разбейте этот F: в конце ствола начертите F (продолжение), от него под +30° — ветку F, затем продолжение, от него под -30° — ветку F
  3. Каждая новая F = отрезок 4 см (вдвое короче — это «сжатие» масштаба)
  4. Повторите для каждого нового отрезка — это следующая итерация
  5. На 3-й итерации F = 2 см → у вас 5-уровневое дерево

Что заметить: структура ветвления одинакова на всех уровнях — это и есть самоподобие.

Опыт 2: Код на Python (10 строк)

import turtle
import re

def apply_rules(axiom, rules, n):
    s = axiom
    for _ in range(n):
        s = ''.join(rules.get(c, c) for c in s)
    return s

def draw_lsystem(t, instructions, angle, length):
    stack = []
    for cmd in instructions:
        if cmd == 'F':
            t.forward(length)
        elif cmd == '+':
            t.left(angle)
        elif cmd == '-':
            t.right(angle)
        elif cmd == '[':
            stack.append((t.position(), t.heading()))
        elif cmd == ']':
            t.penup()
            pos, head = stack.pop()
            t.goto(pos); t.setheading(head)
            t.pendown()

# Параметры
axiom = 'F'
rules = {'F': 'F[+F]F[-F]F'}
n = 4          # число итераций
angle = 25.7   # угол ветвления
length = 5     # длина отрезка (пикселей)

t = turtle.Turtle()
t.speed(0); t.left(90); t.penup(); t.goto(0, -200); t.pendown()
instructions = apply_rules(axiom, rules, n)
draw_lsystem(t, instructions, angle, length)
turtle.done()

Упражнения:

  • Измените angle от 10° до 60° → как меняется форма?
  • Попробуйте правило F → FF+[+F-F-F]-[-F+F+F] (ещё одна классика)
  • Добавьте цвет: t.color('green') для ветвей, t.color('brown') для ствола
  • Измените n от 1 до 6 → считайте число «листьев» (терминальных F)

Закономерность: при n итерациях, если каждый F порождает k новых F, число ветвей = kⁿ. При n=5, k=3: 3⁵ = 243 ветви из одного правила.

Опыт 3: Измерить реальное дерево

Правило Леонардо да Винчи

В записных книжках Леонардо (~1490) есть наблюдение:

«Все ветви дерева на каждой высоте, взятые вместе, равны толщине ствола.»

Формально: сумма площадей сечений всех ветвей одного уровня = площадь сечения ствола.

π·r₀² = π·r₁² + π·r₂² + ... + π·rₙ²
r₀² = r₁² + r₂² + ... + rₙ²

Это оптимизирует гидравлическое сопротивление — вода поднимается с минимальными потерями давления.

Измерение:

  1. Найдите небольшое деревце (3–5 м) или ветку
  2. Измерьте диаметр ствола на высоте 1 м: d₀
  3. Найдите первый уровень ветвления — измерьте диаметры всех ветвей: d₁, d₂, …
  4. Проверьте: d₀² ≈ d₁² + d₂² + … ?
  5. Перейдите на второй уровень — проверьте то же самое

Обычно правило работает с точностью 10–20%. Отклонения — интересный повод для вопроса: почему?

Золотой угол ветвления

В листорасположении (филлотаксис) угол между соседними листьями — 137,5° (золотой угол = 360° / φ², где φ = 1,618…).

У деревьев угол ветвления варьируется, но в спиральных структурах (шишки, подсолнухи) — именно 137,5°.

Измерение:

  1. Найдите молодой побег с чётко выраженным листорасположением (яблоня, вяз, бук)
  2. Отметьте последовательные листья: 1, 2, 3, 4…
  3. Измерьте угол между листьями 1 и 2, 2 и 3…
  4. Сравните с 137,5°

Фрактальная размерность

Фрактальная размерность D дерева измеряется методом «покрытия клетками»:

  1. Сфотографируйте зимнее дерево (без листьев) на однородном фоне
  2. Распечатайте на A4, наложите сетку с ячейкой h
  3. Подсчитайте число ячеек N(h), которые пересекает дерево
  4. Уменьшите ячейку вдвое: h/2 → N(h/2)
  5. D = log(N(h/2)/N(h)) / log(2)

Для реальных деревьев D ≈ 1,5–1,8 (больше линии = 1, меньше площади = 2).

Опыт 4: Фотография + реконструкция

Время: 60–90 минут Лучшее время: зима или ранняя весна (до распускания листьев)

Задание:

  1. Сфотографируйте дерево при пасмурном небе (равномерный фон)
  2. По фотографии определите «тип» ветвления: симметричное / спиральное / вееровидное
  3. Подберите правило L-системы, которое даёт похожий силуэт
  4. Сравните: что совпало, что нет? Почему?

Математика: как считать ветви

При правиле F → F[+F]F[-F]F каждый F порождает 5 новых F, но из них 2 являются ветвями ([+F] и [-F]), а 3 — продолжением ствола. Число ветвей N_n на уровне n:

N₀ = 1 (ствол)
N₁ = 2 (первые ветви)
N₂ = 4
N_n = 2ⁿ

Рост числа ветвей экспоненциальный — вот почему дерево за лето образует тысячи листьев из одной почки.

Галерея L-систем: классические примеры

СистемаПравилаИтер.Что получается
ТраваF→FF-[-F+F+F]+[+F-F-F]4Куст травы
ПапоротникX→F+[[X]-X]-F[-FX]+X, F→FF5Папоротник
Снежинка КохаF→F+F—F+F4Снежинка
ДраконX→X+YF+, Y→-FX-Y12Дракон Хартера-Хейтуэя
ВодоросльA→AB, B→A8Рост клеток

Вопросы для обсуждения

  1. Почему в природе нет деревьев с идеально симметричным ветвлением? Какой биологический смысл случайности?
  2. Если фрактальная размерность побережья Великобритании = 1,25, что это значит?
  3. Как L-системы помогают в компьютерной графике для игр и кино?
  4. Правило Леонардо оптимально для водопроводной трубы или для дерева? В чём разница?
  5. Могло ли правило ветвления 137,5° возникнуть случайно, или это необходимое следствие математики роста?

Связи с другими экспериментами

  • fractals-nature — фракталы в неживой природе: береговые линии, снежинки, лихтенберг
  • fractals-mandelbrot — сложность из простого правила z→z²+c
  • fibonacci-nature — числа Фибоначчи, золотое сечение и тот же угол 137,5°
  • physarum — физарум строит оптимальные сети: другой алгоритм природы

Что почитать

Книги

  • Пайтген Х.-О., Рихтер П.Х.. Красота фракталов (1993) есть на русском Классическая книга с визуальными примерами, есть глава про L-системы
  • Prusinkiewicz P., Lindenmayer A.. The Algorithmic Beauty of Plants (1990) Исчерпывающий труд по L-системам, бесплатно на сайте авторов
  • Мандельброт Б.. Фрактальная геометрия природы (2002) есть на русском Мандельброт о том, почему у природы нет прямых линий

Онлайн

Обратная связь
Тип обращения
Ваша оценка
Сообщение
Подтверждение
Загрузка...

без персональных данных