[Level 31]
Title: Where am I?
图片链接的地址需要用户名和密码。以图片搜索,搜出了 hin ta & hin yai rock,还有 Koh Samui,然而都不是用户名密码。
Where am I? island: country。所以是 kohsamui 和 thailand。真正的 Level 31 出来了,标题为 UFOs ?,还有新的图片:
嗯,Mandelbrot set(曼德博集合),分形图。利用源码给出的参数画出新图形与原图形比较。怎么构图?
图片的每一个坐标(x, y)
代表复数c
,令z = 0 + 0j
,重复计算z = z * z + c
,如果z
限制在一定范围内,点亮该点,否则设为黑色。事实上设置计算次数为该点的像素值。
设w
和h
为图片的宽度和高度,则c
的实部为left + x * width / w
,虚部为top + y * height / h
from PIL import Image
img = Image.open("mandelbrot.gif")
w, h = img.size
left, top, width, height = 0.34, 0.57, 0.036, 0.027
iters = 128
result = []
for y in range(h - 1, -1, -1):
for x in range(0, w):
z = 0 + 0j
c = complex(left + x * width / w, top + y * height / h)
for i in range(iters):
z = z * z + c
if abs(z) > 2:
break
result.append(i)
用得到的数据构图,新图与原图没多大差别,有少许像素点差值为 16 或 -16。收集起来,共有 1679 个。
img2 = img.copy()
img2.putdata(result)
img2.show()
diff = [(a-b) for a, b in zip(list(img.getdata()), result) if a != b]
print(len(diff))
将收集的数据用于构成另一张图。
img3 = Image.new('L', (23, 73))
img3.putdata([i>0 and 255 or 0 for i in diff])
img3.show()
搜索图片可得到 arecibo(Messaggio di Arecibo),[Level 32]