Нам нужно думать о c
как о комплексном числе, поэтому в обычном случае Мандельброта мы имеем:
zy = 2*zx * zy + cy;
zx = zx2 - zy2 + cx;
Но чтобы получить обратную величину c
, мы должны сделать сложный ответной:
zy = 2*zx * zy + (cy / (cx**2 + cy**2));
zx = zx2 - zy2 + (cx / (cx**2 + cy**2));
Конечно, поскольку c
является постоянной величиной от перспективы цикла, мы можем вычислить обратную величину до цикла. В таком языке, как Python с комплексными числами, это простое изменение по сравнению с обычным Мандельбротом:
c = complex(real, imaginary)
z = 0j
for i in range(iterations):
if abs(z) >= 4.0:
break
z = z * z + c
к перевернутому Мандельброту:
c = 1 / complex(real, imaginary)
z = 0j
for i in range(iterations):
# ...
Но если мы сами реализуем комплексные числа, то для нормального Мандельброта мы делаем:
x = real
y = imaginary
zx = 0
zy = 0
for i in range(iterations):
zx2 = zx * zx
zy2 = zy * zy
if ((zx2 + zy2) ** 0.5) >= 4.0:
break
zy = 2*zx * zy + y
zx = zx2 - zy2 + x
и для перевернутого Мандельброта мы делаем:
denominator = real**2 + imaginary**2
x = real / denominator
y = imaginary / denominator
zx = 0
zy = 0
for i in range(iterations):
# ...
Итог, это разница между:
1 / complex(real, imaginary) # correct
и
complex(1 / real, 1 / imaginary) # incorrect