I need to create a hex-tile map, using at most 19 colors, where each color must keep a distance of at least 3 tiles. However, I do not need to use all 19 colors. If there exists an algorithm that solves this distance constraint with less than 19 colors, this is completely fine.
The Beckman-Quarles theorem [1] looks related, and there is a 7-color tile map shown where same colored tiles keep a distance of 2 to each other.
But I have a hard time to find an understandable description or even implementation for constructing a hex tile map with a distance of 3.
[1] http://de.wikipedia.org/wiki/Satz_von_Beckman_und_Quarles
Let's set up a coordinate system where the hex with coordinates (i,j)
is adjacent to (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)
I'm going to apply a shear transform so that I can draw hex grids compactly with ASCII art. The transformed 7-hex region looks like this.
**
***
**
What you want to do is tile the plane with the following 19-color layout.
ABC
DEFG
HIJKL
MNOP
QRS
The tiles can fit together like so.
111
1111
00011-11
00001111333
00-001113333
000022233-33
00022223333555
22-223335555
222244455-55
22244445555
44-44555
4444
444
I've marked the tile centers with -
. These form a lattice generated by two vectors: (5,-3)
and (3,2)
. Given hex coordinates (i,j)
, we can (inelegantly, perhaps) solve the matrix equation
[5 -3] [u] [i]
[3 2] [v] = [j]
in rational variables u, v
, then, trying all four integer roundings of u
and v
to nearby integers u*
and v*
respectively, determine which tile (i,j)
lies in and apply the appropriate color, where the tile center is
[5 -3] [u*]
[3 2] [v*].