Как создать фрактал на компьютере

Обновлено: 07.07.2024

Привет, Хабр! Сегодняшний пост про фракталы попался в рамках проработки темы Python, в частности, Matplotlib. Последуем примеру автора и предупредим, что в посте много тяжелой анимации, которая может даже не работать на мобильном устройстве. Зато как красиво.


Всем приятного чтения

Фракталы прекрасны. Они выстраиваются в соответствии с очень сложным паттерном и сохраняются без искажения при любом увеличении! В этой статье мы рассмотрим, как можно с легкостью начертить фракталы нескольких видов, воспользовавшись инструментом под названием L-Systems и модулем Turtle для Python, чтобы выполнить пошаговое вычерчивание.

В этой статье мы не будем чрезмерно вдаваться в технические детали; вместо этого я ограничусь кратким введением, покажу много анимированных примеров и код, при помощи которого вы сможете сами сгенерировать такой пример. Если желаете пропустить теорию и только посмотреть анимацию, сразу переходите к примерам. Кроме того, в конце я укажу несколько ресурсов, как по написанию кода, так и по базовой математике, которые вы, возможно, захотите исследовать.

Что такое фрактал?

Для начала давайте дадим «нестрогое» определение фрактала. В принципе, фрактал — это геометрическая фигура, демонстрирующая одни и те же свойства независимо от степени увеличения.

Это определение небезупречно, поэтому вот более точное с сайта Math World:

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

Как чертить фракталы при помощи Python?

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

Два подобных примера – квадратный остров Коха, чья структура четко вырисовывается после трех итераций, и дракон Картера-Хейтуэя, для построения полной структуры которого достаточно 8 итераций. Необходимое количество итераций сильно зависит от конкретного фрактала, с которым мы работаем.

Разумеется, существует множество библиотек на Python для построения графиков, среди которых наиболее популярна Matplotlib, но они обычно рассчитаны на нанесение статистических данных и вычерчивание хорошо известных графиков. В частности, Matplotlib содержит некоторые низкоуровневые конструкции, при помощи которых можно строить фракталы, но на этот раз мы сосредоточимся на незаслуженно малоизвестном модуле стандартной библиотеки, который называется Turtle.

Модуль Turtle

В документации Python читаем: «графика Turtle – популярный инструмент для первого знакомства детей с программированием. Он входил в состав оригинального языка программирования Logo, разработанного Уолли Фёрзегом и Сеймуром Пейпертом в 1966 году.»

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

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

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

Система Линденмайера, также известная как L-система, это механизм перезаписи строк, который может использоваться для генерации фракталов с размерностью от 1 до 2 — Math World

Поняв, что такое L-система, мы сможем создавать рекурсивные структуры, но прежде давайте разберемся, какие компоненты нам для этого понадобятся. В каждой L-системе есть:

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

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

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

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

Теперь давайте перейдем к примерам!

Анимированные примеры

Следующие примеры были взяты в Интернете из нескольких общедоступных источников, и я решил портировать их на Python при помощи модуля Turtle, центрировать их, раскрасить и предоставить способ экспорта в векторный формат.

ВНИМАНИЕ: предлагаемые анимации достаточно велики, рекомендуется смотреть их лишь с хорошим интернетом. Код Repl может не работать, так как потребляет ваши ресурсы, и с отображением фракталов на мобильных устройствах возможны проблемы.

Внимание: Skulpt использует для рендеринга и создания анимации ВАШ БРАУЗЕР, так что при подвисании, лагах или любом странном поведении обычно достаточно просто заново воспроизвести анимацию или перезагрузить страницу. На мобильном устройстве может не работать.

Примеры даны в порядке усложнения (на мой субъективный взгляд), так что самое интересное – в конце.

Уроки создания фракталов

Apophysis 7x - это уникальная программа для генерации фракталов. Фракталы - это очень красивые изображения, которые состоят из большого количества одинаковых частей, имитирующих единое целое. Смотрите сами, какие изображения можно создавать благодаря apophysis 7X:

Уроки создания фракталов

Уроки создания фракталов

Уроки создания фракталов

Уроки создания фракталов

Одно из приятных моментов является то, что программа Apophysis 7x совершенно бесплатна.

Вы можете скачать уроки Apophysis 7x , в архивах для скачивания вы найдете текстовые документы Word с уроками, а также видеоуроки по работе с программой. Их я собрала все в одном месте и создавать фракталы уже сами. На сайте уже есть уроки по фракталам, причем не только с помощью этой программы. Их можно создавать и фотошоп, и в GIMP. Есть и другие специальные программы для генерации фрактальных изображений. Скоро выйдут свежие авторские уроки по этой теме.

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

Зачем создавать фракталы?

Во-первых, это красиво. Создание их расслабляет. Это является одним из способов релаксации.

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

Понравилась статья? Подпишитесь на канал, чтобы быть в курсе самых интересных материалов


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

фракталы

фракталы
fractal

Так выглядит интерфейс программы:

интерфейс

Можете увеличить, кликнув мышкой по скриншоту. Интерфейс программы состоит из следующих частей:

1. Меню. В нем все команды программы, начиная с открытия файла, обработки изображения и, заканчивая сохранением фрактала на компьютер.

2. Панель инструментов – список наиболее часто применяемых функций.

3. Флеймы. Так в программе называется список готовых фракталов, видоизменяя которые, вы можете получить новые фрактальные изображения.

4. Просмотр фрактальной схемы. Здесь отображаются все изменения фрактала, которые происходят в результате видоизменений.

5. Строка состояния (не отмечена на скриншоте) расположена в самом низу программы. Она информирует нас о времени, которое тратится на то, чтобы отразить флейм.

Этапы работы в программе Apophysis:

3. Теперь нужно открыть созданный файл, используя клавиши CTRL+O или File –Open.

4. Меняем параметры изображения на свое усмотрение (об этом ниже).

5. Сохраняем флейм на компьютер CTRL+S или кнопку . Для того, чтобы сохранить фрактал на компьютер нажимаем кнопки Ctrl + R или кнопку , выбираем нужный формат (PNG или JPG) изображения.

Основные функции программы Apophysis:

Назначение программы Fractal Explorer

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

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

Интерфейс

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

фото-1

фото-1

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

Первый блок нужен для выбора фрактала, с которым вы будете работать.

фото-1

Второй блок нужен для выбора действий по работе с уже созданным фракталом.

фото-1

Третий используется для непосредственной работы.

фото-1

В четвертом блоке можно найти дополнительные функции.

фото-1

Пятый – блок полезных кнопок.

фото-1

Шестой – служебные клавиши.

фото-1

Доступны такие режимы:

  • Перемещение: в этом режиме узел, к которому прикоснулись, выбирается и затем перемещается событием «при перетаскивании». По мере перемещения узла цветовая полоса обновляется в реальном времени, а фрактал – нет (из-за ограничений, описанных в разделе «Шейдеры»).
  • Добавить: пока этот режим активен, касание помещает новый цветовой узел в то же положение по оси x, что и касание, но вертикально на цветовой полосе.

Осторожно! Поскольку это одно событие на прикосновение, фрактал может быть обновлен сразу после добавления цветового узла. Общее количество цветовых узлов, которые могут быть размещены, составляет 32 из-за того, что узлы отправляются в шейдер, но фракталы, как правило, выглядят довольно некрасиво с таким количеством цветов, и поэтому ограничение не достигается на практике.

Основные параметры фрактала:

  • Дочерние элементы меню могут быть добавлены или удалены, если активен режим Джулии/Мандельброта. Его цель – продемонстрировать математические концепции.
  • Отображение сложной сетки: это состояние можно переключать при выполнении других действий, чтобы наложить сложную сетку для помощи в работе.
  • Отображение ловушек орбиты: в этом режиме затронутый пиксель отображается на комплексную плоскость, как в алгоритмах Джулии/Мандельброта. По мере повторения алгоритма все значения z отображаются соединенными линиями. Если z принадлежит набору, то он будет образовывать замкнутую или спиралевидную форму. Если z не принадлежит таковому, он покинет экран и будет стремиться к бесконечности.
  • Режим Джулии/Мандельброта: это состояние можно переключить, чтобы интерпретировать «с» как постоянное значение, указанное пользователем, а не как отображение пикселей. При первом входе в режим Julia отображается предлагаемое значение константы из списка, который может видеть зритель.
  • Set Constant: в этом режиме прикосновение отображается на комплексную плоскость как c, изменяющее текущий набор Джулии. Пока этот режим активен, для справки отображается наложение сложной сетки.
  • Предлагаемые константы: этот список существует для пользователей, которые могут быстро переключаться между доступными наборами. Его выбор без знания оптимальных значений обычно дает неинтересные наборы конфигураций фрактала.
  • Навигация. Все дочерние элементы этого меню касаются сложной плоскости для управления окном сложной плоскости. Поскольку окно сложной плоскости представляет собой квадрат, а дисплей Cyber-Commons представляет собой длинный прямоугольник, требуется обрезка и центрирование.
  • Панорамирование: в этом режиме сохраняется длина окна сложной плоскости, но изменяется его верхний левый угол, так что место, которого коснулся пользователь, становится новым центром.
  • Сброс: прикосновение сбрасывает окно сложной плоскости без изменения текущего режима навигации. Если отображается Набор Мандельброта, то центр окна комплексной плоскости (-0,5, 0,0i) соответствует центру фрактала.
  • Увеличить масштаб: в этом режиме длина окна комплексной плоскости уменьшается вдвое, а его верхний левый угол перемещается так, что место, которого коснулся пользователь, становится новым центром.
  • Уменьшение: этот режим удваивает длину окна сложной плоскости и перемещает его верхний левый угол, так что место, которого коснулся пользователь, становится новым центром.

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

Особенности использования Fractal Explorer

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

Фракталы

Набор Мандельброта определяется как:

z = z2 + c

Каждый пиксель также отображается на комплексную плоскость, и положение каждого пикселя затем представляет собой «c». Число итераций z, которое можно было бы назначить, в идеале было бы бесконечным для идеальной визуализации, но, очевидно, это невозможно на компьютере. Вместо этого определяется максимальное количество итераций, а z назначается самое большее максимальное время итераций. Пиксель, который не принадлежит набору Мандельброта, приведет к тому, что назначения z будут принимать значения с величиной, стремящейся к бесконечности. Как только величина z выходит за пределы порога (традиционно 2,0), она стремится к бесконечности, а соответствующему пикселю назначается цвет путем сопоставления количества использованных итераций z.

Шейдеры

Традиционно последовательная программа будет выполнять сопоставления и итерации, необходимые для каждого пикселя для создания изображения, поэтому как максимальное количество итераций, так и количество пикселей влияют на скорость программы. Cyber-Commons имеет разрешение в пикселях 8160 * 2304 (18,8 мегапикселей), а традиционный метод однократного обновления дисплея занимал около 45 секунд, когда максимальное количество итераций было установлено равным 1000.

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

Меню взаимодействия

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

Фрактальный цвет

Это меню открывает кнопка WidgetColor, предназначенная для управления выбором цвета между обработкой и шейдерами. Управление цветом в каждом шейдере осуществляется путем определения двух ближайших соседних цветовых узлов из отсортированного списка к конкретному пикселю и интерполяции их цветов. WidgetColor отображает цветовую полосу, а также 4 параметра, которые при выборе берут управление из меню.

Режим заставляет затронутые узлы цвета переключать полосы выбора для обновления их цвета. Эта функция удобна для многих пользователей, так как несколько цветовых узлов могут быть обновлены одновременно.

Пока цветовой узел обновляется событием «при перетаскивании», цветовая полоса обновляется в реальном времени, но фрактал не обновляется из-за ограничений, описанных в Шейдерах. Недавно открытые полосы выбора, которые перекрывают меню, или другие полосы выбора скрывают элементы, с которыми пользователь взаимодействовал ранее.

Преимущества и недостатки ПО

К преимуществам Fractal World Explorer относятся:

  • Простая и понятная установка.
  • Огромное количество функций.
  • Интуитивно понятный интерфейс.

Среди недостатков выделяют:

  • Не все функции действительно можно понять самостоятельно.
  • Для работы придется посмотреть видеоуроки.

Итоги

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

Полезное видео

Практическое руководство по созданию фрактала:

Читайте также: