[В начало] [Программа] [Галерея] [Анимации] [О построении] [Ссылки] [Новости] ["Вселенная фракталов"] [Авторы] [Форум]

Плавная раскраска множества Мандельброта

1. Предварительные сведения. Пусть множество Мандельброта M порождается итеративным процессом вида: z0(c)=0, zn+1(c)=f(zn(c), c), где f(z,c) - некоторый полином:
M={множество таких комплексных чисел c, что последовательность |zn(c)| оганичена}.

Для каждого комплексного числа c множество Жюлиа Jc задаётся итеративным процессом z0(z)=z, zn+1(z)=f(zn(z), c):

Jc={множество таких комплексных чисел z, что последовательность |zn(z)| ограничена}

Стандартный алгоритм строит приближения множеств Мандельброта и Жюлиа:

M={c: |zn(c)|<R, для всех 0<n<N} и
Jc={z: |zn(z)|<R, для всех 0<n<N},
где N - число итераций (обычно N>200) и R - "радиус" (R>=2 для M, и R>=(1+sqrt(1+4|c|))/2 для Jc).

2. Функция непрерывная на внешности множеств M и Jc.
Сформулируем задачу: Построить непрерывную функцию w(z), определённую всюду на внешности множества Мандельброта (Жюлиа) и ведущую себя на бесконечности, как 1/z. Кроме того, желательно, чтобы вычисление w(z) было связанно с вычислением последовательности zn.

Пусть f(z,c) - полином степени m по переменной z. При больших значениях |zn| отношение w(zn)/w(zn+1) ведёт себя как f(zn,c)/zn=znm-1+O(|znm-2|). Процесс построения w(z) можно выбрать таким образом, что w(zn)/w(zn+1)=znm-1, при |zn|<R, и w(zn)=1/zn, при |zn|>=R.

В частности, для процесса f(z,c)=z^2+c получаем, что последовательность w(zn)/w(zn+1) ведёт себя, как (zn^2+c)/zn=zn+O(1/|zn|). Этому условию удовлетворяет, например, функция заданная итеративным процессом:

w(zn)=zn*w(zn+1), при |zn|<R, и
w(zn)=1/zn, при |zn|>=R.
Таким образом, если |zn|>R для некоторого натурального n, то
w(z0)=z0*z1*...*zn-1/zn.

Используя стандартные средства ТФКП для иследования бесконечных произведений нетрудно показать, что определённая таким образом комплексная функция w(z) сходится, при R стремящемся к бесконечности, к некоторой функции, аналитической (а следовательно и непрерывной) всюду на внешности множества Мандельброта (Жулиа). Что собственно и требовалось.

3. Вычисление плавной раскраски. Если rgb(z)=(r(z),g(z),b(z)) - некоторое непрерывное отображение комплексной плоскости в цветовой куб (r,g,b), то rgb(w(z)) - искомая непрерывная раскраска. Например, в качестве r(z),g(z),b(z) можно взять функции:

r(t)=a1*sin(t+b1)+c1,
g(t)=a2*sin(t+b2)+c2,
b(t)=a3*sin(t+b3)+c3,
где t=t(z) можно положить t=|z| или t=arg(z)
и ak, bk, ck - некоторые вещественные константы.
Далее: Плавная раскраска множества Мандельброта - пример программы (java апплет).
(c) 2005 http://fractals.nsu.ru/