美文网首页
Python Challenge[31]

Python Challenge[31]

作者: Recgat | 来源:发表于2017-03-15 23:47 被阅读0次

    [Level 31]


    Title: Where am I?

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

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

    嗯,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()
    

    搜索图片可得到 areciboMessaggio di Arecibo),[Level 32]

    Python Challenge Wiki

    相关文章

      网友评论

          本文标题:Python Challenge[31]

          本文链接:https://www.haomeiwen.com/subject/pszrgttx.html