понедельник, 2 февраля 2026 г.

Пробую разбираться в Множестве Мандельброта

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



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

Кто такой Мандельброт и зачем ему фракталы

Бенуа Мандельброт — польско-французский математик, который в 1970-х годах буквально изобрёл слово «фрактал». До него подобные структуры считались «монстрами» математики — слишком сложными, чтобы быть полезными. Но Мандельброт увидел в них порядок: береговые линии, облака, ветвление деревьев — всё это нельзя описать прямыми и окружностями, но можно приблизить фрактальной геометрией. Множество, названное его именем, стало визитной карточкой этой идеи — не потому что «красивое», а потому что показывает: хаос и порядок живут рядом.
Практическая польза? Не в том, чтобы рисовать обои для рабочего стола. Фрактальный анализ сегодня применяется в сжатии изображений, моделировании антенн, изучении турбулентности и даже в финансовой математике — там, где классические модели ломаются о сложность реального мира.
Ну все это лирика, важно то что это тупо математика - есть формула, которая закрашивает пиксели определенным цветом в зависимости от условий, упрощенно если кол-во итераций больше заданной то ярким, если меньше то менее ярким. Вот еще нейронка описала эту формулу для меня:

Множество Мандельброта — кратко

Множество Мандельброта — это набор комплексных чисел c, для которых последовательность, заданная формулой zₙ₊₁ = zₙ² + c при z₀ = 0, не уходит в бесконечность. На практике мы проверяем, не превысит ли модуль |zₙ| значение 2 за фиксированное число шагов.

Как строится изображение

Для каждого пикселя с целочисленными координатами (x, y), где 0 ≤ x < W и 0 ≤ y < H, вычисляется комплексное число:

c = cre + cim·i

где:

  • Вещественная часть:
    cre = 1.5 · (x − W/2) / (0.5 · zoom · W) + moveX
  • Мнимая часть:
    cim = (y − H/2) / (0.5 · zoom · H) + moveY

Затем выполняется итерационный процесс:
z₀ = 0 + 0·i
zₙ₊₁ = zₙ² + c

Итерации продолжаются, пока не выполнится одно из условий:

  • Модуль zₙ превысит 2;
  • Достигнуто максимальное число итераций MAX_ITER.

Модуль комплексного числа z = a + b·i вычисляется как:
|z| = √(a² + b²)
Пример: для z = -2 − i → |z| = √(4 + 1) = √5 ≈ 2.236.

Цвет определяется числом итераций n:
hue = (n % 256) × 360 / 256 → используется в hsl(hue, 100%, 50%).

Цветовой круг HSV: 0°=красный, 60°=жёлтый, 120°=зелёный, 180°=голубой, 240°=синий, 300°=фиолетовый.

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

https://boolkin.github.io/html/Vibe/mand+zhu.html - красивые генерации

https://boolkin.github.io/html/Vibe/mand-pix.html - попиксельный расчет

Комментариев нет:

Отправить комментарий