Фрактал – это объект или величина, демонстрирующие самоподобие (в формальном смысле) в любых масштабах. Объект демонстрирует при разных масштабах не идентичные структуры, но на всех уровнях фрактала должны проявляться структуры одного и того же «типа». В таком случае график, откладываемый в системе координат с логарифмическим масштабом, где по осям отсчитываются величина и масштаб, то график представляет собой прямую линию с наклоном, отражающим размерность фрактала.
Как правило, отрисовка фракталов сложна, так как глубинная природа фракталов определяется концепцией рекурсии. Говоря о графиках и их вычерчивании, мы обычно считаем, что они образованы пикселями или векторами, но количество пикселей или векторов всегда ограничено, а фракталы по определению бесконечно рекурсивны. Таким образом, попытавшись нанести фрактал на координатную сетку, мы в какой-то момент должны будем остановиться, и именно поэтому мы в данном случае говорим об «итерациях». На каждой итерации фрактал становится все сложнее, и в какой-то момент становится невозможно отличить две его итерации, следующие друг за другом (такой момент наступает, когда изменения происходят на уровне, сравнимом с размером пикселя).
Природные объекты (квазифракталы) отличаются от идеальных абстрактных фракталов неполнотой и неточностью повторений структуры. Большинство встречающихся в природе фракталоподобных структур являются квазифракталами, поскольку на некотором малом масштабе фрактальная структура исчезает. Природные структуры не могут быть идеальными фракталами из-за ограничений, накладываемых размерами живой клетки и, в конечном итоге, размерами молекул.
В живой природе:
- Кораллы
- Морские звезды и ежи
- Морские раковины
- Цветы и растения (брокколи, капуста)
- Кроны деревьев и листья растений
- Плоды (ананас)
- Система кровообращения и бронхи людей и животных
В неживой природе:
- Границы географических объектов (стран, областей, городов)
- Береговые линии
- Горные хребты
- Снежинки
- Облака
- Молнии
- Морозные узоры на оконных стёклах
- Кристаллы
- Сталактиты, сталагмиты, геликтиты.
Для визуализации фракталов на Python можно воспользоваться модулем Turtle (черепаха).
Суть заключается в том, что черепаха по умолчанию распознает 3 команды:
- Ползти вперед
- Повернуть влево на угол
- Повернуть вправо на угол
Также мы можем:
- Отключить запись
- Включить запись
L-система – это способ представления рекурсивных структур (например, фракталов) в виде строки символов и многократной перезаписи такой строки.
В каждой L-системе есть:
- Алфавит: множество символов, которые будет использовать L-система.
- Аксиома: исходная строка для генерации.
- Набор инструкций создания строк: эти инструкции описывают, как каждый символ должен заменяться на следующей итерации.
L-системы являются подмножеством контекстно-свободных грамматик.
Turtle для построения графиков и L-системы для представления того, что собираемся наносить на график, нам необходимо создать взаимосвязь между ними.
Поскольку в Turtle мы располагаем только теми командами, что перечислены выше, присвоим каждой из них символ; из этих символов и будет состоять алфавит.
- F: ползти вперед
- +: повернуть вправо
- -: повернуть влево
Чтобы это заработало, для каждого фрактала должен предоставляться угол; это и будет угол, на который черепаха будет поворачивать вправо или влево. Для простоты условимся, что предоставлен должен быть только один угол, и мы будем писать L-систему, держа это в уме.
Аксиома и инструкции создания строк будут зависеть только от фрактала, но фрактал должен быть написан таким образом, чтобы его можно было представить только этими тремя символами.
Для пеализации древовидных фракталов предлагается использовать стек, работающий по принципу LIFO – последним вошел, первым вышел. Как только черепашка оказывается в точке ветвления, в стек помещается кортеж со значениями ее текущих координат и угла поворота.
Затем, выполняются две команды на поворот влево и перемещение вперед. Как только они завершаются, из стека выбирается последняя запись и черепашка возвращается на указанные в ней координаты. Далее, снова идет запись в стек, т.к. мы находимся в точке ветвления и собираемся пройтись по другой ветке. Затем, поворот направо и движение вперед. После этих команд, из стека извлекается последняя запись и черепашка вновь оказывается в точке ветвления.
На уровне команд весь этот процесс перемещения можно описать так: F[+F][-F].
То есть, у нас появляются новые управляющие символы – квадратные скобки. Когда скобка открывается, то в стек помещаются координаты и ориентация черепашки. При появлении закрывающей квадратной скобки, из стека извлекается последняя запись и черепашка помещается в соответствующие координаты.
Для раскрашивания фракталов можно также использовать управялющий символ, например "С". Когда в инструкциях стречается этот символ, то черепаха меняет свой цвет.