Python Challenge[31]

[Level 31]

Python Challenge[31]_第1张图片

Title: Where am I?

图片链接的地址需要用户名和密码。以图片搜索,搜出了 hin ta & hin yai rock,还有 Koh Samui,然而都不是用户名密码。

Where am I? island: country。所以是 kohsamuithailand。真正的 Level 31 出来了,标题为 UFOs ?,还有新的图片:

Python Challenge[31]_第2张图片

嗯,Mandelbrot set(曼德博集合),分形图。利用源码给出的参数画出新图形与原图形比较。怎么构图?

图片的每一个坐标(x, y)代表复数c,令z = 0 + 0j,重复计算z = z * z + c,如果z限制在一定范围内,点亮该点,否则设为黑色。事实上设置计算次数为该点的像素值。

wh为图片的宽度和高度,则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]

Python Challenge Wiki

你可能感兴趣的:(Python Challenge[31])