Фракталы

Мандельброт и Жюлиа

Каждая точка плоскости запускает орбиту z → z² + c; цвет — то, как быстро она убегает. Зум до 10⁻¹².

  • шейдер на GPU
  • зацикленная анимация
Открыть в редакторе →

Возьмите комплексное число c, начните с нуля и повторяйте одно действие: возвести в квадрат, прибавить c. Те c, при которых последовательность не улетает в бесконечность, образуют множество Мандельброта. Правило умещается в строчку, а граница множества бесконечно сложна: где ни увеличивай, появляются новые спирали, усики и крошечные копии целого.

Как это устроено

Каждый пиксель — своя точка c. Шейдер повторяет шаг, пока |z| не превысит 10 000 (порог выше классической двойки — так плавный счёт точнее) или пока не кончится лимит — от 220 шагов на общем плане до нескольких тысяч в глубине. Цвет задаёт плавный счёт ν: число шагов с дробной поправкой, которая показывает, насколько орбита «перелетела» порог. Полосы отсчитываются от самой быстро убегающей точки кадра, поэтому на любой глубине раскраска одинаково богатая.

zₙ₊₁ = zₙ² + c, z₀ = 0 (Жюлиа: z₀ — точка, c — константа) ν = n + 1 − log₂ log₂|zₙ| d ≈ |zₙ|·ln|zₙ| / (2|zₙ′|) zₙ = Zₙ + δₙ: δₙ₊₁ = 2Zₙδₙ + δₙ² + δc

Вместе с z считается производная z′, а из неё — оценка расстояния d до границы. По ней проявляются нити тоньше пикселя и работают «Рельеф» и «Свечение». Ловушки запоминают, насколько близко орбита подошла к точке, прямой, кресту или окружности.

Видеокарта считает во float32 — это около семи знаков, и уже при увеличении примерно в тысячу раз соседние пиксели слипаются. Выручает теория возмущений: процессор в двойной точности считает одну опорную орбиту Zₙ из центра кадра, а каждый пиксель ведёт лишь своё малое отклонение δₙ, которому семи знаков хватает. Если орбита пикселя подходит к нулю ближе, чем велико отклонение, её перецепляют к началу опорной. Так Мандельброт, трикорн, мультиброт и Жюлиа погружаются до 10⁻¹²: будь множество размером с Землю, кадр был бы тоньше волоса. Горящий корабль и метод Ньютона считаются напрямую.

Немного истории

В 1918 году Гастон Жюлиа, потерявший на фронте нос, получил Большую премию Парижской академии наук за мемуар об итерациях рациональных функций; параллельно ту же теорию строил Пьер Фату. Первое грубое изображение множества напечатали Роберт Брукс и Питер Мателски в 1978 году, в работе о кляйновых группах. В 1980-м Бенуа Мандельброт подробно рассмотрел его на компьютерах IBM, а в 1982-м Адриен Дуади и Джон Хаббард доказали, что оно связно, и назвали его именем Мандельброта. Трюк с возмущениями опубликовал в 2013 году К. И. Мартин.

Что покрутить

  • «Место» «Долина морских коньков», «Раскраска» «полосы», «Рельеф» около 0,7 — завитки станут объёмными.
  • «Место» «Дендрит», затем «Формула» «Жюлиа»: веточки множества Мандельброта возле точки i повторяют веточки множества Жюлиа для c = i. Это сходство доказала Тан Лэй.
  • «Место» «Бездна 10⁻¹⁰» и «Увеличение» 100 — предел глубины, кадр в триллион раз меньше общего плана.
  • «Ньютон: zⁿ − 1» со «Степенью» 5: в любой точке границы бассейнов сходятся цвета всех пяти корней, а «c: Re» и «c: Im» меняют шаг метода, и границы вспухают.
  • «Внутри» «фон» делает множество прозрачным: подложите снизу «Фрактальный шум», и внутри заклубится туман. А эффект «Мозаика» сверху выложит всё смальтой.

Параметры

Формула
Мандельброт · Жюлиа · Горящий корабль · Трикорн · Мультиброт zⁿ + c · Ньютон: zⁿ − 1 · Ньютон: z³ − 2z + 2
Степень
Для мультиброта и метода Ньютона zⁿ − 1
Место
Знаменитые места множества Мандельброта; в режиме Жюлиа — параметр c этого места Целиком · Долина морских коньков · Долина слонов · Спираль · Двойная спираль · Мини-Мандельброт · Лес · Снежинки · Морская звезда · Усики · Глубина 10⁻⁸ · Бездна 10⁻¹⁰ · Кролик Дуади · Дендрит · Сан-Марко · Диск Зигеля · Самолёт · Галактика
Центр X
Сдвиг в высотах кадра выбранного места
Центр Y
Увеличение
Мандельброт, трикорн и мультиброт — до 10⁻¹² (теория возмущений); остальные — пока хватает точности float
Поворот
c: Re
Добавка к c множества Жюлиа; у Ньютона — релаксация шага
c: Im
Раскраска
плавная · полосы · по расстоянию · ловушка: точка · ловушка: прямая · ловушка: крест · ловушка: окружность
Частота полос
Рельеф
Освещение по оценке расстояния до границы
Свечение
Цвет гаснет вдали от множества, у границы — светлый ободок
Внутри
фон · ловушка · тёмное