📖 Документация Qumir

← Вернуться в Playground

← Все примеры

Фрактальное дерево

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

Разбор

Перемещаем черепаху вниз (чтобы дерево росло снизу вверх) и запускаем рекурсию с глубиной 9 и начальной длиной 160:

использовать Черепаха
алг
нач
    поднять хвост
    назад(120)
    опустить хвост
    дерево(9, 160.0)
кон

Алгоритм дерево работает так: если глубина равна нулю, рисуем короткий отрезок --- это «лист». Иначе рисуем часть ствола, затем разветвляемся:

алг дерево(цел n, вещ len)
нач
    если n = 0 то
        вперед(len * 0.4)

Ключевая идея --- команды сохранить состояние и восстановить состояние. Они запоминают позицию и направление черепахи и возвращают её обратно. Это позволяет нарисовать левую ветвь, вернуться в точку развилки и нарисовать правую:

    иначе
        вперед(len * 0.4)
        сохранить состояние
        влево(25)
        дерево(n - 1, len * 0.7)
        восстановить состояние
        сохранить состояние
        вправо(25)
        дерево(n - 1, len * 0.7)
        восстановить состояние
    все
кон

Полная программа

использовать Черепаха
алг
нач
    поднять хвост
    назад(120)
    опустить хвост
    дерево(9, 160.0)
кон

алг дерево(цел n, вещ len)
нач
    если n = 0 то
        вперед(len * 0.4)
    иначе
        вперед(len * 0.4)
        сохранить состояние
        влево(25)
        дерево(n - 1, len * 0.7)
        восстановить состояние
        сохранить состояние
        вправо(25)
        дерево(n - 1, len * 0.7)
        восстановить состояние
    все
кон

▶ Запустить пример