首先,这是我的代码:
from PIL import Image as im
import numpy as np
def mandelbrot_iteration(c):
iters = 0
while abs(c)<2 and iters<200:
c=c**2+c
iters+=1
return iters
HEIGHT = 400
WIDTH = 500
diag = im.new('L',(WIDTH, HEIGHT))
pix = diag.load()
x_pts = np.arange(-2,2,4/WIDTH)
y_pts = np.arange(-2,2,4/HEIGHT)
for x in x_pts:
for y in y_pts:
pix[x+2,y+2]=mandelbrot_iteration(complex(x,y))
diag.save("Fractal.png")
我认为这很直截了当。我看到复数数字网格上每个点的多少交互都会超过abs。值为2并将这些值绘制为每个点的颜色(假设序列没有发散,则200为截止值)。在指定的范围内,肯定会发生一些非平凡的事情,但无论我尝试什么,图像都是纯黑色的。
此生成图像的方法几乎没有文档。我搜索了很多,这个:
im.load()
为图像分配存储空间并从文件中加载(或从中加载) 来源,懒惰操作)。在正常情况下,您不需要 调用此方法,因为Image类自动加载一个打开的 第一次访问时的图像。
(1.1.6中的新增功能)在1.1.6及更高版本中,load返回像素访问对象 可用于读取和修改像素。访问对象的行为 就像一个二维数组,所以你可以这样做:
pix = im.load()print pix [x,y] pix [x,y] = value
通过此对象访问比getpixel和putpixel
快得多
我能找到的所有(没有任何例子),这非常令人沮丧。我想像pix [x + 2,y + 2]这条线是错的。 '+ 2'可以阻止“超出范围”的错误,但是,在尝试了一些例子后,我不知道输入数字是如何产生颜色的。我确实发现创建图像时“L”应该生成灰度图像,但不知道pix [x,y]的预期范围是什么。一切都变黑了......
答案 0 :(得分:2)
当前的问题是您的比例已关闭。
在这一行Task<StorageFile>
中,您的pix[x+2,y+2]=...
和x
范围内的唯一像素是y
。由于最后绘制的几个像素是黑色,因此整个左上角的4x4正方形为黑色(其余为0 - 也为黑色 - 默认情况下为新图像)。
可以这样解决:
0..4
虽然结果还不是很好的Mandelbrot ......
使用hcs'注释“mandelbrot迭代应该是z = 0,而abs(z)&lt; 2,z = z ** 2 + c”应用,你将使用此代码
from PIL import Image as im
import numpy as np
def mandelbrot_iteration(c):
iters = 0
while abs(c)<2 and iters<200:
c=c**2+c
iters+=1
return iters
HEIGHT = 400
WIDTH = 500
diag = im.new('L',(WIDTH, HEIGHT))
pix = diag.load()
x_pts = np.arange(-2,2,4.0/WIDTH)
y_pts = np.arange(-2,2,4.0/HEIGHT)
for x in x_pts:
for y in y_pts:
pix[WIDTH*(x+2)/4.0,HEIGHT*(y+2)/4.0]=mandelbrot_iteration(complex(x,y))
diag.show()
然后看到一个真正的Mandelbrot弹出: