我们有一个六边形的晶格:
_ _ _
/ \_/ \_/ \_
\_/ \_/ \_/ \
/ \_/ \_/ \_/
\_/ \_/ \_/
最好的方式是使用二维数组或任何其他方法来表示它。
_ _ _
/ \_/ \_/ \_
\_/ \_/ \_/ \
/ \_/ \_/ \_/
\_/ \_/ \_/
最好的方式是使用二维数组或任何其他方法来表示它。
(0,0) (0,1) (0,2) (0,3) (0,4)
(1,0) (1,1) (1,2) (1,3) (1,4)
(2,0) (2,1) (2,2) (2,3) (2,4)
(3,0) (3,1) (3,2) (3,3) (3,4)
确定任何给定六边形的最近邻很容易:在上面的情况下,对于给定的数组地址(r,s)
,您有:
(r-1, s)
(r-1, s+1)
(r, s-1)
(r, s+1)
(r+1, s-1)
(r+1, s)
另外,请注意绘图位置很简单:上方六边形(r,s)
的中心位于屏幕位置:
x= dx * (s + 0.5*r)
y= dy * r
由于OP想了解更多,我会添加一个链接到我最喜欢的不太常见的十六进制索引系统:一个"螺旋蜂窝马赛克"。该系统使用基数为七的系统来索引越来越大的“超级六边形”组合的六边形位置,如下所示(请注意,它是用基数7而不是10标记的):
7 elements: 49 elements:
2 3
22 23
1 0 4 -->
12 13 21 20 24
6 5
11 10 14 26 25 32 33
16 15 02 03 31 30 34 --> [3 base-7 digits
-> 343 elements...]
62 63 01 00 04 36 35
61 60 64 06 05 42 43
66 65 52 53 41 40 44
51 50 54 46 45
56 55
这个链接包含一些处理该坐标系的代码,但我还没有真正尝试评估它....
图片来源:https://www.redblobgames.com/grids/hexagons/#conversions
使用2行=1个六边形高度和1列=1个六边形宽度的2D数组是可以的。
4,1,5,2,6,3
4,7,5,8,6,9
A,7,B,8,C,9
A,D,B,E,C,F
x+y
为偶数的坐标 (x,y)
)。当然,你不想浪费一半的数组条目——因此,@LastCoder 上面的排列。 - comingstorm