遵循使用这个问题作为新问题基础的明显传统,我也有一个问题,我希望尽可能优雅地解决:
我已经实现了一个六边形地图:
(想在这里插入图片..但由于是新的,我不允许...请参阅上面的链接)
但现在我想知道如何(优雅地)为这种类型的地图使用这些类型的坐标实现 A*。我有在典型的平方网格(我认为是笛卡尔网格?)上使用 A* 的经验,我在那里处理它的方式似乎与这个坐标系不兼容。
通常我会生成一个二维字节数组。数组的索引将对应于网格坐标,并且所述索引处的值将给出该节点的“权重”。(0 是不可通行的,较高的数字“权重”比较低的数字更多)。
例子:
sbyte[,] pathGrid = new sbyte[5, 5]
{
{0,0,1,0,0},
{9,5,1,3,0},
{9,5,1,3,0},
{9,5,1,3,0},
{0,0,1,0,0}
};
在 0 无法通过的情况下,1 将很容易遍历,并且更大的数字将“花费”更多遍历。(对不起格式化..我是一个堆栈溢出newb:P)这个数组将根据我的地图的组成生成,然后输入我的寻路算法,该算法又会吐出一个节点列表(路径)如果没有找到路径,则返回 null。
然而,使用这种类型的网格,这是不可能的(至少乍一看),因为负坐标(显然在数组中不起作用)以及网格不遵循与 ' 相同的规则这一事实典型的'网格。
我认为有一些方法可以使用我的 A* 方法来解决这个问题,但它们都相当草率(转换网格坐标和使用空节点),我想知道是否有人想到了一种优雅地做到这一点的方法。
感谢您在任何情况下阅读:)(顺便说一句,我在 C#/.net 中这样做是为了它的价值)