用于对具有重复颜色的最小距离(3)的六边形瓦片图着色的算法

时间:2014-11-24 16:11:58

标签: algorithm graph-algorithm tile hexagonal-tiles

我需要创建一个十六进制图块地图,最多使用19种颜色,其中每种颜色必须保持至少3个图块的距离。但是,我不需要使用所有19种颜色。如果存在一种用少于19种颜色解决这个距离约束的算法,这是完全正常的。

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

但我很难找到一个可理解的描述,甚至是用于构建距离为3的六角形瓷砖地图的实现。

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

1 个答案:

答案 0 :(得分: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*].