Skip to content

FoxWithBoot/fractal-visualization

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Визуализация фракталов в Python

Фракталы

Фрактал – это объект или величина, демонстрирующие самоподобие (в формальном смысле) в любых масштабах. Объект демонстрирует при разных масштабах не идентичные структуры, но на всех уровнях фрактала должны проявляться структуры одного и того же «типа». В таком случае график, откладываемый в системе координат с логарифмическим масштабом, где по осям отсчитываются величина и масштаб, то график представляет собой прямую линию с наклоном, отражающим размерность фрактала.

Как правило, отрисовка фракталов сложна, так как глубинная природа фракталов определяется концепцией рекурсии. Говоря о графиках и их вычерчивании, мы обычно считаем, что они образованы пикселями или векторами, но количество пикселей или векторов всегда ограничено, а фракталы по определению бесконечно рекурсивны. Таким образом, попытавшись нанести фрактал на координатную сетку, мы в какой-то момент должны будем остановиться, и именно поэтому мы в данном случае говорим об «итерациях». На каждой итерации фрактал становится все сложнее, и в какой-то момент становится невозможно отличить две его итерации, следующие друг за другом (такой момент наступает, когда изменения происходят на уровне, сравнимом с размером пикселя).

В природе

Природные объекты (квазифракталы) отличаются от идеальных абстрактных фракталов неполнотой и неточностью повторений структуры. Большинство встречающихся в природе фракталоподобных структур являются квазифракталами, поскольку на некотором малом масштабе фрактальная структура исчезает. Природные структуры не могут быть идеальными фракталами из-за ограничений, накладываемых размерами живой клетки и, в конечном итоге, размерами молекул.

В живой природе:

  • Кораллы
  • Морские звезды и ежи
  • Морские раковины
  • Цветы и растения (брокколи, капуста)
  • Кроны деревьев и листья растений
  • Плоды (ананас)
  • Система кровообращения и бронхи людей и животных

В неживой природе:

  • Границы географических объектов (стран, областей, городов)
  • Береговые линии
  • Горные хребты
  • Снежинки
  • Облака
  • Молнии
  • Морозные узоры на оконных стёклах
  • Кристаллы
  • Сталактиты, сталагмиты, геликтиты.

Визуализация фракталов на Python

Для визуализации фракталов на Python можно воспользоваться модулем Turtle (черепаха).

Turtle

Суть заключается в том, что черепаха по умолчанию распознает 3 команды:

  • Ползти вперед
  • Повернуть влево на угол
  • Повернуть вправо на угол

Также мы можем:

  • Отключить запись
  • Включить запись

L-системы

L-система – это способ представления рекурсивных структур (например, фракталов) в виде строки символов и многократной перезаписи такой строки.

В каждой L-системе есть:

  • Алфавит: множество символов, которые будет использовать L-система.
  • Аксиома: исходная строка для генерации.
  • Набор инструкций создания строк: эти инструкции описывают, как каждый символ должен заменяться на следующей итерации.

L-системы являются подмножеством контекстно-свободных грамматик.

Turtle для построения графиков и L-системы для представления того, что собираемся наносить на график, нам необходимо создать взаимосвязь между ними.

Поскольку в Turtle мы располагаем только теми командами, что перечислены выше, присвоим каждой из них символ; из этих символов и будет состоять алфавит.

  • F: ползти вперед
  • +: повернуть вправо
  • -: повернуть влево

Чтобы это заработало, для каждого фрактала должен предоставляться угол; это и будет угол, на который черепаха будет поворачивать вправо или влево. Для простоты условимся, что предоставлен должен быть только один угол, и мы будем писать L-систему, держа это в уме.

Аксиома и инструкции создания строк будут зависеть только от фрактала, но фрактал должен быть написан таким образом, чтобы его можно было представить только этими тремя символами.

Фракталы с ветвлением

Для пеализации древовидных фракталов предлагается использовать стек, работающий по принципу LIFO – последним вошел, первым вышел. Как только черепашка оказывается в точке ветвления, в стек помещается кортеж со значениями ее текущих координат и угла поворота.

Затем, выполняются две команды на поворот влево и перемещение вперед. Как только они завершаются, из стека выбирается последняя запись и черепашка возвращается на указанные в ней координаты. Далее, снова идет запись в стек, т.к. мы находимся в точке ветвления и собираемся пройтись по другой ветке. Затем, поворот направо и движение вперед. После этих команд, из стека извлекается последняя запись и черепашка вновь оказывается в точке ветвления.

На уровне команд весь этот процесс перемещения можно описать так: F[+F][-F].

То есть, у нас появляются новые управляющие символы – квадратные скобки. Когда скобка открывается, то в стек помещаются координаты и ориентация черепашки. При появлении закрывающей квадратной скобки, из стека извлекается последняя запись и черепашка помещается в соответствующие координаты.

Цвет

Для раскрашивания фракталов можно также использовать управялющий символ, например "С". Когда в инструкциях стречается этот символ, то черепаха меняет свой цвет.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published