Фрактальное дерево
Рекурсивное построение дерева с ветвлением. Каждая ветвь порождает две более короткие, что создаёт реалистичный древовидный силуэт.
Разбор
Перемещаем черепаху вниз (чтобы дерево росло снизу вверх) и запускаем рекурсию с глубиной 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)
восстановить состояние
все
кон
- Угол ветвления --- $25°$ в каждую сторону.
- Коэффициент $0{,}7$ уменьшает длину ветвей на каждом уровне.
- Глубина 9 создаёт $2^9 = 512$ «листьев».
Полная программа
использовать Черепаха
алг
нач
поднять хвост
назад(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)
восстановить состояние
все
кон