以最小距离(3)为重复出现的颜色着色六边形瓦片 map 的算法

标签 algorithm graph-algorithm tile hexagonal-tiles

我需要创建一个六边形 map ,最多使用 19 种颜色,其中每种颜色必须保持至少 3 个图 block 的距离。但是,我不需要使用全部 19 种颜色。如果存在一种算法可以用少于 19 种颜色解决这个距离约束,那就完全没问题了。

Beckman-Quarles 定理 [1] 看起来很相关,并且显示了一个 7 色瓦片 map ,其中相同颜色的瓦片彼此保持 2 的距离。

但我很难找到构建距离为 3 的六边形瓦片 map 的可理解描述甚至实现。

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

最佳答案

让我们建立一个坐标系,其中坐标为 (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 十六进制区域如下所示。

**
***
 **

您要做的是用以下 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

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

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

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

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

关于以最小距离(3)为重复出现的颜色着色六边形瓦片 map 的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27109172/

相关文章:

python - 图像噪声处理和边缘方向确定

algorithm - 在推理图中查找第一个 UIP

c# - 从数组生成瓦片 map

algorithm - 如何用二叉索引树(BIT)找到一定长度的递增子序列的总数

.net - EXE 压缩(对于 .NET 应用程序)算法以二进制代码显示带有真实人名的奇怪字符

JAVA - 多线程Mergesort的排序速度

algorithm - 最长递增子序列使得 LIST 中的 last-First 元素最大

css - 特殊页面背景 - 静态、平铺

java - 如何渲染不同尺寸的图 block ?

c++ - vector 到 vector 字符串比较搜索的问题