Фракталы

Растяните рамку по изображению — область увеличится. Колесо мыши масштабирует, двойной щелчок центрирует, Ctrl+перетаскивание двигает картинку, Esc отменяет выделение.

Центр
Ширина области
Увеличение
Точность
Кадр

Что это такое и как этим пользоваться

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

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

Главное: такую картинку никто не рисовал. Она задана правилом. Берём число, много раз подряд применяем к нему одно и то же простое действие и смотрим, что с ним стало: улетело в бесконечность или осталось на месте. Вся сложность узора рождается из повторения этого простого действия — и граница между «улетело» и «осталось» оказывается бесконечно сложной.

Как рисуется картинка
  1. Каждая точка экрана — это число. Плоскость здесь комплексная: по горизонтали откладывается обычная, действительная часть числа, по вертикали — мнимая, та, что идёт с множителем i (это число, у которого i² = −1). Точка с координатами (x, y) — это число x + yi.
  2. К числу много раз применяют правило. У Мандельброта оно такое: z начинается с нуля, дальше zz² + c, где c — та самая точка экрана. Получили новое z — подставили обратно, и так по кругу.
  3. Смотрят, убежало ли. Как только длина z переваливает за «радиус убегания», точку признают сбежавшей и считать перестают. Если за отведённое число повторений (итераций) она так и не убежала — считается, что точка внутри множества, и её красят «цветом внутренней области».
  4. Цвет — это скорость побега. Номер шага, на котором точка убежала, переводится в цвет по палитре. Убежавшие за 5 шагов и дотянувшие до 300 попадают в разные места палитры — отсюда цветные полосы вокруг фигуры. Галочка «плавные переходы» делает номер шага дробным (по тому, насколько далеко z вылетело за радиус), и ступеньки между полосами исчезают.
  5. Считает видеокарта. У каждого пикселя свой независимый цикл, а пикселей миллионы — поэтому расчёт идёт в WebGL на GPU, а не в обычном JavaScript. При сильном увеличении координаты перестают помещаться в точность видеокарты, и включаются обходные приёмы — какой именно работает сейчас, написано в строке «Точность».
Что означают формулы

Во всех формулах z — то, что меняется на каждом шаге, c — постоянная, а |z| — расстояние от нуля, то есть длина. Панель «Формула» всегда показывает текущее правило целиком, с уже подставленными значениями.

  • Мандельброт, zzp + c. Точка экрана подставляется как c, а z стартует с нуля. Получается карта: каждая точка отвечает на вопрос «если правило запустить отсюда — улетит или нет».
  • Жюлиа — то же правило наоборот: c один и тот же для всей картинки (его задают ползунки Re(c) и Im(c)), а стартовым z становится точка экрана. У каждого c свой узор, поэтому рядом лежат «готовые константы» — заведомо красивые значения.
  • Степень p — во сколько раз число «закручивается» вокруг нуля за один шаг. При p = 2 выходит классическая фигура с одним телом и усами, при p = 3 — три симметричных лепестка, дальше по тому же принципу.
  • Горящий корабль — перед возведением в степень у z берут модули обеих частей, то есть отбрасывают знаки. Отражение ломает плавные завитки и делает узор угловатым, похожим на горящие мачты.
  • Трикорн — вместо z подставляется сопряжённое число: у мнимой части меняется знак. Картинка становится симметричной и обзаводится тремя рогами.
  • Кельтский, Буффало, Перпендикулярный корабль, Паук — те же два приёма (модуль и сопряжение), но применённые к разным кускам выражения. Мелкая правка правила даёт совершенно другое семейство узоров — в этом и смысл лаборатории.
  • Феникс помнит не только текущее z, но и предыдущее, и подмешивает его с коэффициентом. Из-за этой памяти узор вытягивается в перистые нити.
  • Магнит — дробь, пришедшая из физики фазовых переходов. Вместо привычных усов даёт круглые капли и кольца.
  • Бассейны Ньютона — здесь ничего не убегает. Метод Ньютона ищет корень уравнения zp − 1 = 0, а цвет показывает, к какому из корней съехала точка и за сколько шагов. Фрактал — это границы между зонами притяжения корней: сколько ни приближай, ни в одной точке границы нельзя сказать, куда она свалится.
Как пользоваться формой

Мышь и клавиши

  • Растянуть рамку по картинке — приблизить эту область. Пропорции кадра сохраняются, так что картинка не растянется.
  • Колесо мыши — плавное увеличение, двойной щелчок — центрировать на точке, Ctrl + перетаскивание — сдвинуть картинку, Esc — отменить рамку.
  • Кнопка «Перемещение» переключает мышь в режим таскания, если рамка мешает. Кнопки и меняют масштаб вдвое, ↶ Назад отменяет последнее приближение, ⟲ Сброс возвращает исходный вид, ⤓ PNG сохраняет кадр картинкой.

Вид

Семейство фракталов — с него и начинайте. Остальные поля подстраиваются под выбор: например, ползунки Re(c)/Im(c) появляются только там, где константа имеет смысл.

Структура

  • Степень p — форма фигуры, см. раздел про формулы.
  • Re(c) и Im(c) — действительная и мнимая части константы для Жюлиа и родственных семейств. Двигайте их медленно: узор меняется резко, и самое интересное происходит у края множества Мандельброта.
  • Радиус убегания — на каком удалении точку признают сбежавшей. Математически хватает двойки, но чем радиус больше, тем плавнее и «шире» получаются цветные полосы.

Интенсивность

  • Итерации — сколько шагов отводится точке, прежде чем её признают внутренней. Главная ручка при глубоком приближении: если картинка стала плоской и чёрной, итераций не хватает.
  • Подбирать итерации по глубине — оставьте включённым, и число шагов будет расти само по мере приближения.
  • Плотность цвета — насколько часто повторяется палитра: маленькие значения дают широкие плавные переходы, большие — тонкие кольца.
  • Сдвиг палитры — прокручивает цвета по кругу, не меняя рисунок. Удобно, когда узор нравится, а сочетание цветов — нет.
  • Качество — сглаживание: 4 или 9 отсчётов на пиксель убирают «песок» на тонких нитях, но кадр считается дольше.

Цвет

Десять палитр, включая «Свой цвет» — он строит градиент от выбранного оттенка. Отдельно задаётся цвет внутренней области (по умолчанию почти чёрный), а «подсветка внутренней области» проявляет её структуру вместо сплошной заливки.

Готовые виды

Кнопки-фишки переносят сразу к известным местам: «долина морских коньков», «слоновья долина» и прочие. Ниже — «картинка в картинке»: точные центры уменьшенных копий множества, найденные заранее. С них удобно начинать знакомство с глубоким зумом.

Строка состояния

  • Центр и ширина области — где вы находитесь на комплексной плоскости.
  • Увеличение — во сколько раз кадр уже приближен относительно исходного.
  • Точность — каким способом считается кадр. «Одинарная» — обычная точность видеокарты; «двойная (эмуляция)» включается сама при увеличении примерно от ×30 000 и работает примерно до ×10¹⁵; для квадратичного Мандельброта дальше подхватывает «возмущения» — расчёт идёт относительно одной точной опорной точки, и приближаться можно на много порядков глубже. Приписка «предел» означает, что глубже метод уже не может.
  • Кадр — сколько миллисекунд занял последний расчёт.

Ссылка на вид

Все настройки, включая координаты центра, пишутся в адрес страницы после символа #. Скопируйте адрес из строки браузера — по нему откроется ровно тот же кадр; закладка тоже сработает.

Если что-то пошло не так

Картинка почти вся чёрная — мало итераций или вы внутри множества. Картинка «мылом» и крупными квадратами — упёрлись в предел точности, посмотрите строку «Точность». Кадр считается секундами — уменьшите качество или итерации: на слабой видеокарте девять отсчётов на пиксель при 50 000 итераций честно отработают всё, что попросили.