Вы должны сначала понять это:
z = z^2 + c
Давайте разберемся.
И z
, и c
являются комплексными числами (и недавний вопрос научил меня это подчеркивать, они имеют дробных цифр и могут выглядеть следующим образом: c=-0.70176-0.3842i
). Комплексные числа могут иметь часть, которая не является реальной, правильный термин - мнимая часть, и вы записываете одиночное комплексное число в виде:
(a + bi)
, что совпадает с: (a + b*i)
Если b равно 0, то у вас есть a + 0i
, который просто a
, поэтому без мнимой части у вас есть действительное число.
В вашей ссылке не упоминается самое важное свойство комплексного числа, особенно свойство его мнимой части, которая i == sqrt(-1)
. В области действительных чисел нет такого понятия, как квадратный корень из отрицательного числа, и именно здесь комплексные числа входят и позволяют получить квадратный корень из -1. Давайте поднимем i
до степени 2: i^2 == -1
, магия!
Мнимая часть (i
) должна обрабатываться вами (специальным квадратом), или язык программирования, с которым вы работаете, предложит вам сложный тип, который обрабатывает его для вас.
Теперь вернемся к расширению z^2
:
z == (a+bi)
, следовательно z^2 == (a+bi)^2
, поэтому z^2 == (a^2 + bi^2 + 2*a*bi)
.
Давайте разберем это также:
a^2
=> это просто, это действительное число
bi^2
=> Хитрая часть. Это действительно b^2*i^2
. И мы получили здесь i^2
, то есть -1
, что делает его b^2*-1
или: -b^2
. Так что это тоже реальное число.
2*a*b*i
=> это будет мнимая часть
Результат: z^2 = (a^2-b^2+2*a*bi)
Пример (немного более подробный. Вы можете думать об этом как о первой итерации в цикле):
z = (5 + 3i)
z^2 = (5 + 3i)^2
= (5^2 + 3^2*i^2 + 2*5*3i)
= (25 + 9i^2 + 30i)
= (25 + 9*-1 + 30i)
= (25 - 9 + 30i)
= (16 + 30i)
Теперь, если вы понимаете итерацию и умножение комплексных чисел, несколько слов о Мандельброте (и о значении c
):
Когда вы хотите создать множество Мандельброта, вы действительно ищете точки на комплексной плоскости, которые никогда не уходят в бесконечность, если их повторять - скажем, 50 раз - с итерацией, описанной выше. Набор Мандельброта - это черная часть обычно видимых картин "Мандельброта", а не блестящая цветная часть.
Обычный рабочий процесс такой:
- выберите точку на комплексной плоскости, скажем (1.01312 + 0.8324i) => это будет значение
c
!
- перед первой итерацией поместите (0, 0i) в
z
, затем выполните итерацию несколько раз, как указано ранее => z = z^2 + c
. Да, вы возводите в квадрат точку и добавляете к ней ту же точку, это очень важный атрибут из набора Мандельброта . Для начала сделайте это 50 раз. В результате вы получите комплексное число.
- если какая-либо часть результирующего комплексного числа (действительного или мнимого) равна или больше 2, то мы предполагаем, что эта точка будет уходить в бесконечность, и мы считаем эту точку не равной часть набора Мандельброта *. Это тот случай, когда вам нужно раскрасить точку (это красочная часть набора Мандельброта). Если обе части комплексного числа меньше 2, мы предполагаем, что точка никогда не уйдет в бесконечность (даже если повторяется более миллиона раз), и рассматриваем эту точку как часть множества Мандельброта, и ее цвет будет черным.
- повтор (выберите следующую точку, поместите ее значение в
c
, поместите ноль в z
и вычислите)
* на самом деле, проверка, является ли точка частью набора, немного сложнее, но это хорошо работает для прототипов