代码之家  ›  专栏  ›  技术社区  ›  sf8193

算法:用枕头创建六边形

  •  1
  • sf8193  · 技术社区  · 7 年前

    我正在尝试在32 x 32的图像上创建统一数量的六边形。我一直在尝试想出一个有效的算法,但却没有想出任何好的。这就是我到目前为止想出来的

    for i in range(0,20):
        im = Image.new("1",(400,400))
        draw = ImageDraw.Draw(im)
            for j in range(i, 20):
               if i > 3 and j > 3:
               half = i/2
               difference = i-half
               z = half/2
               draw.polygon([(z/3,i),(z,half),(z*3,half),(i,i),(z*3,i+difference),(z,i+difference)], fill="white")
               im.show()
    

    这个算法的问题是变量z是0(或非常接近),除非你得到相当大的数字,不幸的是,在我的情况下,它被限制了。六边形不需要是规则的,它们只需要看起来像六边形。

    任何帮助都非常感谢

    1 回复  |  直到 7 年前
        1
  •  0
  •   sf8193    7 年前

    如果出于某种原因,任何人都遇到过类似的问题,这就是我想到的。如果有人能想出更快的解决方案,请毫不犹豫地发帖。

       for i in range(0,pixels):
        im_rect = Image.new("1", (pixels,pixels))
        draw_rect = ImageDraw.Draw(im_rect)
        for j in range(i, pixels):
            for x in range(i,pixels - i):
                for y in range(j,pixels -j):
                    if i > 3 and j > 3 and i +(3*x) < pixels and y+j < pixels:
                        draw.polygon([(i,j),(i+x,y-j),(i+x+x,y-j),(i+(3*x),j),(i+x+x,y+j),(i+x,y+j)], fill="white")
    
    推荐文章