gpt4 book ai didi

arrays - 表示六角点阵的最佳方式是什么

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:17:09 25 4
gpt4 key购买 nike

我们有一个六边形格子:

 _   _   _
/ \_/ \_/ \_
\_/ \_/ \_/ \
/ \_/ \_/ \_/
\_/ \_/ \_/

用二维数组或其他什么来表示它的最佳方式是什么

最佳答案

用二维数组表示六边形网格的最简单方法是倾斜轴:每行六边形比前一行多偏移半步。每行向前或向后偏移并不重要,只要您对此保持一致即可;下面,每个连续的行向前偏移半个十六进制:

(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 想要更多,我将添加一个指向我最喜欢的晦涩的十六进制索引系统的链接:a "spiral honeycomb mosaic" .这使用以七为底的系统来索引连续更大的十六进制位置的“超六边形”组,如下所示(请注意它以七为底标记,而不是十进制):

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

该链接有一些处理此坐标系的代码,但我还没有真正尝试过对其进行评估....

关于arrays - 表示六角点阵的最佳方式是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7392621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com