如何在QuadTree上进行A *导航

时间:2012-09-24 10:43:58

标签: navigation path-finding a-star quadtree pathfinder

我想在QuadTree上做导航/ A *。

我已经实现了QuadTree,或者至少我认为是QuadTree。与此同时,我已经看到一些内部节点也包含元素。使用我的内部节点只链接到他们的子节点,元素存储在叶节点的集合中。 当每个节点链接到其父节点时,(当前)没有到邻居的链接,既不是兄弟节点也不是其他分支的节点。元素是区域而不仅仅是点。

我在网格上看到了A *相当长的一段时间,甚至在QuadTree上看过一个演示,但这没有细节。

我想主要的问题是如何快速找到我的邻居?

我不确定是否应该保持叶子相互连接。但是这将是一个很糟糕的工作,因为树是动态的,因为元素更新了它们的位置。它还需要一些动态收集王的链接,因为根据节点大小,一个大叶子可以在一个方向上有很多小叶子(例如东)。更新这个的努力似乎相当巨大,即使目前还不知道我会怎么做。

Thx n rgds

2 个答案:

答案 0 :(得分:0)

A *是用于查找从起始节点到结束节点的最短路径的算法。这在树木中确实没有多大意义,因为最短的路径总是从开始上升到least-common-ancestor,然后一直到最后。

如果由于某种原因你无法在树中找到完成,那么你必须将树视为普通图并进行广度优先搜索(或A * ,如果你有某种启发式的话)

  

我想主要的问题是如何快速找到我的邻居?

存储指向树中每个节点的父节点的指针。然后,可以通过查看其所有父母的孩子来查看节点的兄弟姐妹。

答案 1 :(得分:0)

这是可能的,但肯定不是最佳的。 A *在图数据结构上完成。其中'graph'表示可以非常快速地访问节点 - 最好通过直接指针/引用。

通过quadtree获取邻居的正常方法是explained on wikipedia - 因此,如果子条目在查询范围内,则检查是否递归。它也是already implemented

如果你还需要A *,你可以走另一条路:使用普通图表,在其上做A *并实现最近邻搜索directly on the graph