在六边形网格上找到相邻的邻居

Jon*_*anb 10 python grid tiles hexagonal-tiles

编辑:在代码块中包装示例映射,以便格式正确.

好吧,我正在尝试在六边形网格上编写一个非常简单的A*算法.我明白了,可以做A*部分.事实上,我的A*适用于方格网格.我无法包裹我的大脑是找到六边形的邻居.这是海格网格的布局

0101     0301
    0201      0401
0102     0302
    0202      0402
Run Code Online (Sandbox Code Playgroud)

等等

所以,我需要帮助的是编写一个Hexagon类,给定它的十六进制坐标,可以生成一个邻居列表.它需要能够生成会从网格中"掉落"的邻居(如20x20网格中的0000或2101),因为这就是我的A*轨道并排放置在多个地图上的方式.所以可以使用这段代码片段:

planet = Hex('0214')print(planet.neighbors())['Hex 0213','Hex 0215','Hex 0115','Hex 0315','Hex 0116','Hex 0316']

G B*_*G B 7

这取决于您如何定义六角形瓷砖的坐标.

让我们来看看.

  ,   ,   ,   ,
 / \ / \ / \ / \
| A1| A2| A3| A4|
 \ / \ / \ / \ /
  | B1| B2| B3|
 / \ / \ / \ / \
| C1| C2| C3| C4|
 \ / \ / \ / \ /
  '   '   '   '
Run Code Online (Sandbox Code Playgroud)

在这种情况下,偶数和奇数行的邻居定义是不同的.

对于Y为偶数的单元格(X,Y),邻域为:(X,Y-1),(X + 1,Y-1),(X-1,Y),(X + 1,Y) ,(X,Y + 1),(X + 1,Y + 1)

对于Y为奇数的单元格(X,Y),邻域为:(X-1,Y-1),(X,Y-1),(X-1,Y),(X + 1,Y) ,(X-1,Y + 1),(X,Y + 1)