【问题标题】:Algorithm for coloring a hexagon tile map with minimum distance (3) for reoccurring colors用最小距离 (3) 为重复出现的颜色着色六边形图块的算法
【发布时间】:2014-11-24 16:11:57
【问题描述】:

我需要创建一个 hex-tile 地图,最多使用 19 种颜色,其中每种颜色必须保持至少 3 个图块的距离。但是,我不需要使用所有 19 种颜色。如果存在用少于 19 种颜色解决此距离约束的算法,那就完全没问题了。

Beckman-Quarles 定理 [1] 看起来相关,并且显示了 7 色瓷砖图,其中相同颜色的瓷砖彼此保持 2 的距离。

但是我很难找到一个可以理解的描述,甚至是构建距离为 3 的六角平铺地图的实现。

[1]http://de.wikipedia.org/wiki/Satz_von_Beckman_und_Quarles

【问题讨论】:

    标签: algorithm graph-algorithm tile hexagonal-tiles


    【解决方案1】:

    让我们建立一个坐标系,其中坐标为(i,j)的十六进制与(i-1,j), (i-1,j+1), (i,j-1), (i,j+1), (i+1,j-1), (i+1,j)相邻。

    (0,3)       (2,2)       (4,1)
          (1,2)       (3,1)
    (0,2)       (2,1)       (4,0)
          (1,1)       (3,0)
    (0,1)       (2,0)
          (1,0)
    (0,0)
    

    我将应用剪切变换,以便我可以使用 ASCII 艺术紧凑地绘制十六进制网格。转换后的 7-hex 区域如下所示。

    **
    ***
     **
    

    您要做的是使用以下 19 色布局平铺平面。

    ABC
    DEFG
    HIJKL
     MNOP
      QRS
    

    这些图块可以像这样组合在一起。

       111
       1111
    00011-11
    00001111333
    00-001113333
     000022233-33
      00022223333555
         22-223335555
          222244455-55
           22244445555
              44-44555
               4444
                444
    

    我已经用- 标记了磁贴中心。它们形成了一个由两个向量生成的格:(5,-3)(3,2)。给定十六进制坐标(i,j),我们可以(可能不太优雅)求解矩阵方程

    [5 -3] [u]   [i]
    [3  2] [v] = [j]
    

    然后,在有理变量u, v 中,分别尝试将uv 的所有四个整数舍入到附近的整数u*v*,确定(i,j) 位于哪个图块并应用适当的颜色, 瓦片中心在哪里

    [5 -3] [u*]
    [3  2] [v*].
    

    【讨论】:

    • “你想要做的是用下面的 19 色布局平铺平面”是什么意思?
    • @benjist 每个大写字母代表一个彩色的十六进制。我想以常规方式在平面上复制那个 19-hex 图案。
    • 我忘了说:十六进制的所有边必须相等。在我的例子中,十六进制表示一个简化的圆形区域(这在将瓷砖组装在一起时会有所不同)。还是我误解了你的建议?
    • @benjist ASCII 艺术是示意图,而不是几何插图。每个字母代表一个十六进制。相邻的六角形是左上、上、左、右、下、右下。
    • 我的意思是,如果您使用由 19 个小六边形组成的单个六边形,则无需移动就无法适应地图。或者,您在地图上作为图案放置的每两个大六边形之间留一个缓冲区六边形空间。
    猜你喜欢
    • 2015-07-16
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多