【发布时间】:2016-11-02 20:16:54
【问题描述】:
我有一个八叉树,我想用它在 3D 空间中执行寻路。我正在使用 Morton 代码对节点进行排序,以便能够轻松找到任何给定节点附近的节点。它似乎工作得很好;我抓取的任何节点子集都相对靠近地聚集在一起。我正在努力寻找一种有效的方法来获取节点的直接邻居。
树的早期版本让它细分树,直到叶子都是我想要的大小相等的节点。这使得查找邻居变得容易,因为每个节点之间存在一致的偏移量,因此我可以在我希望找到节点的位置重新计算 Morton 代码,然后根据代码检索节点。但是我试图通过在没有那么多几何图形的区域(例如,我会得到 8 个空孩子的地方)不把它分解得那么多,从而提高树的效率。结果,我不再知道给定节点可能有多少邻居,也不知道任何邻居的大小(除了它是 2 的幂)。
我最初的想法是在数组中的任一方向搜索附近的节点,这会起作用,但我必须撒网太宽才能保证得到所有邻居,而且我会花时间评估一个大量我不需要的节点。快速测试表明,即使阵列中任一方向的 50 个节点也不能保证获得所有邻居。
树是静态的,所以我也许可以使用上述蛮力方法一次性生成节点的邻居并存储邻居;但我担心这可能会使程序的初始加载时间超出可接受的水平。有没有可以实时找到邻居的算法?
编辑:改写问题以阐明我在寻找什么以及我尝试过什么。
【问题讨论】:
标签: 3d nodes path-finding octree