如何为六边形网格着色,使其没有相同颜色的邻居?
How do I color a hexagonal grid such that it doesn't have neighbors of the same color?
我有一个 javascript 应用程序可以生成六角网格。每个六角形都是尖顶的,每个立方体坐标(x、y 和 z)都有三个变量。我还有一个包含三个十六进制精灵的数组。
我试过 sprite = sprites[hex.x&3]
,它会生成整齐的六角行。我还尝试通过 sprite = sprites[(hex.x + hex.y&3)&3]
根据列偏移行,但这没有用。我目前正在摆弄公式,但收效甚微。
我知道我需要不少于三个精灵来做到这一点,但我找不到一种方法来组合三个立方体坐标以在数组上显示正确的精灵:(
在六角形网格中,您需要三种颜色来为每个六角形着色,这样它就不会与相邻的六角形具有相同的颜色:
您的解决方案走在了正确的轨道上。不要添加 x+y
,而是要减去 x-y
。另一个变化是 &3
用于位操作;你会想要 %3
代替。但是,在某些语言中,包括 Javascript、%3
可以 return 为负数,因此您需要使用 ((___%3)+3)%3
使其变为正数。
您要的 color/sprite id 是 ((x-y)%3 + 3) % 3
。我做了 an interactive demo 来测试这个。
我有一个 javascript 应用程序可以生成六角网格。每个六角形都是尖顶的,每个立方体坐标(x、y 和 z)都有三个变量。我还有一个包含三个十六进制精灵的数组。
我试过 sprite = sprites[hex.x&3]
,它会生成整齐的六角行。我还尝试通过 sprite = sprites[(hex.x + hex.y&3)&3]
根据列偏移行,但这没有用。我目前正在摆弄公式,但收效甚微。
我知道我需要不少于三个精灵来做到这一点,但我找不到一种方法来组合三个立方体坐标以在数组上显示正确的精灵:(
在六角形网格中,您需要三种颜色来为每个六角形着色,这样它就不会与相邻的六角形具有相同的颜色:
您的解决方案走在了正确的轨道上。不要添加 x+y
,而是要减去 x-y
。另一个变化是 &3
用于位操作;你会想要 %3
代替。但是,在某些语言中,包括 Javascript、%3
可以 return 为负数,因此您需要使用 ((___%3)+3)%3
使其变为正数。
您要的 color/sprite id 是 ((x-y)%3 + 3) % 3
。我做了 an interactive demo 来测试这个。