Архив проекта: 14_fractals.py
На прошлом
занятии мы с вами построили несколько разных множеств Жюлиа, используя простую
формулу:
,
где z, c – некие
комплексные числа. На этом занятии мы будем строить множество Мандельброта по той
же самой формуле. У вас может возникнуть вопрос, как используя одну и ту же
формулу можно строить разные множества? Все дело в интерпретации. Я коротко
напомню алгоритм для нахождения точек множеств Жюлиа.
Мы сканировали
множество точек на комплексной плоскости, например, в диапазоне [-2; 2] по
мнимой и действительной осям и если в текущей точке функция
по рекурсии не
уходила в бесконечность, не превышала порог 2, то делали вывод, что она
относится к множеству Жюлиа:
Набор точек для
множества Мандельброта отбирается несколько иначе. Пробегпясь по комплексной
плоскости, мы формируем значение , а
значение всегда
перед началом итераций:
После
итерирования функции, мы также проверяем ее модуль (длину) на значение 2. Если
он меньше, то точка принадлежит множеству Мандельброта. Иначе – не принадлежит.
Программа
предыдущего занятия для построения множества Мандельброта очень просто
модифицируется. В заголовке окна напишем:
pygame.display.set_caption("Множество Мандельброта")
Установим
начальные значения переменных для формирования изображения:
P = 200 # размер [2*P+1 x 2*P+1]
scale = P / 2 # масштабный коэффициент
view = (0, 0) # координаты смещения угла обзора
n_iter = 100 # число итераций для проверки принадлежности к множеству Мандельброта
И, затем, в
цикле сформируем переменную c и начальное значение z:
c = complex(a, b)
z = complex(0)
И это все.
Запускаем программу, видим результат:
Это и есть
изображение множества Мандельброта на самом крупном масштабе. Если нарисовать
его без раскраски, то увидим только черные точки множества и белые – вне его:
Но это не очень
красиво, поэтому я верну краски в изображение. Давайте увеличим изображение и
посмотрим на его более мелкие детали:
scale = P / 0.5 # масштабный коэффициент
view = (0, -200) # координаты смещения угла обзора
Получится,
следующее:
Если мы будем
приближать фрагменты этого множества и рассматривать его на все более мелких
масштабах, то этот процесс может быть бесконечным. У этого множества нет
предела в мелких деталях. Оно самоподобно. С каждым новым масштабом практически
повторяется снова и снова. И так до бесконечности.
Каждый из вас
теперь может создать программу для визуализации и масштабирования этого
изображения и даже создать визуализацию, подобно той, что вы наблюдаете сейчас.
Как видите, для этого достаточно всего одной маленькой формулы, чтобы получить
такое богатство деталей фрактальных форм. Впервые, полученное изображение
множества Мандельброта в 1980 году, впоследствии назвали отпечатком пальца
Бога. Действительно, мы здесь видим удивительный акт творения, практически
из ничего. Еще совсем недавно в исторической перспективе в подобное мало кто
мог бы поверить. Но теперь, перед нами раскрылось все богатство фрактальных
процессов и форм. Это, безусловно, раздвинуло горизонты нашего сознания, позволило
лучше понять фундаментальные процессы природы и, возможно, самого акта рождения
упорядоченных форм во вселенной.