Основная проблема здесь:
X = float(X**2 - Y**2 + x)
Y = float(2*X*Y + y)
В расчете для Y
вы хотите использовать старое значение X
, но оно уже обновлено и больше не доступно. Вы могли бы вместо этого сделать:
new_X = float(X**2 - Y**2 + x)
Y = float(2*X*Y + y)
X = new_X
Или вы можете обновить их параллельно:
X, Y = float(X**2 - Y**2 + x), float(2*X*Y + y)
Кроме того, вам не нужны звонки на float
, поэтому все, что вам действительно нужно, это:
X, Y = X**2 - Y**2 + x, 2*X*Y + y
Кстати, в Python есть встроенный класс комплексных чисел, поэтому вы можете инициализировать z
и Z
как z = complex(x, y)
и Z = complex(0.0, 0.0)
.
Тогда ваше тело цикла будет иметь:
Z = Z**2 + z
Я также предлагаю увеличить максимальное количество итераций. Ограничение до 20 даст очень низкое разрешение. Я обычно использую по крайней мере 1000, по крайней мере для точек около границы, при создании изображений с высоким разрешением.