我有此代码:
from PIL import Image
import colorsys
xmin, xmax = -2.0, 2.0
ymin, ymax = -2.0, 2.0
depth = 12
imgx, imgy = 512, 512
maxIter = 256
image = Image.new("RGB", (imgx, imgy))
for y in range(imgy):
cy = y * (ymax - ymin)/(imgy - 1) + ymin
for x in range(imgx):
cx = x * (xmax - xmin)/(imgx - 1) + xmin
c = complex(cx, cy)
z = 0
for i in range(maxIter):
if abs(z) > 2.0:
break
z = c + complex(0.25, 0.1)
r = i
g = int((i*50)%256)
b = int(255 - i)
image.putpixel((x, y), (r, g, b))
它创建一个圆的图像(下图),我不明白为什么。我认为这可能与for循环和if语句有关,但我无法弄清楚问题出在哪里。如果不是那样,那是什么?
旁注:此代码改编自我编写的Mandelbrot设置代码。唯一的区别是我有z = c + complex(0.25, 0.1),
z = z**2 + c.
答案 0 :(得分:0)
此行:
z = c + complex(0.25, 0.1)
在每次迭代中总是产生相同的值(当前点+一个常数),因此您的代码只画了一个圆。将该行更改为
z = z**2 + complex(0.25, 0.1)
并根据当前点初始化z
(例如c
在当前代码中)。