最近的邻居在Octree搜索

时间:2016-12-23 18:17:57

标签: algorithm

NN算法如何在八叉树上工作?我搜索了一个很好的解释,但大多数时候人们只是说使用了KD树。我不能这样做,我需要逐步在八叉树上可视化NN算法。

我认为最合乎逻辑的方式是:

1)找到该点所属的子八分圆。

2)计算到该八分圆中最近点的距离

3)检查该距离内是否与相邻的八分圆重叠

4)如果找到更近的点,则重新计算搜索距离。

5)重复,直到遍历了所有可能的八分圆

6)返回最近的点

但我不能为这一步做好一步一步的可视化。

1 个答案:

答案 0 :(得分:2)

要查找距离搜索点最近的点,或者按照距离增加的顺序获取点列表,可以使用可以保存树的两个点和内部节点的优先级队列,这样可以按顺序删除它们距离。

对于点(叶子),距离就是该点距搜索点的距离。对于内部节点(八分圆),距离是从搜索点到可能在八分圆中的任何点的最小距离。

现在,要进行搜索,只需将树的根放在优先级队列中,然后重复:

  1. 删除优先级队列的头部;
  2. 如果队列的头部是一个点,那么它是您尚未返回的树中最近的点。你知道这一点,因为如果任何内部节点可能有一个更近的点,那么它将首先从优先级队列返回;
  3. 如果队列的头部是内部节点,则将其子节点放回队列
  4. 这将按照距离搜索点的距离增加的顺序生成树中的所有点。同样的算法也适用于KD树。