【问题标题】:Nearest neighbor search in OctreeOctree 中的最近邻搜索
【发布时间】:2016-12-24 03:35:01
【问题描述】:

NN 算法如何在八叉树上工作?我已经寻找了一个很好的解释,但大多数时候人们只是说使用 KD-tree 代替。我做不到,我需要一步一步在八叉树上可视化NN算法。

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

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

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

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

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

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

6) 返回最近点

但是我想不出一个好的一步一步的可视化。

【问题讨论】:

    标签: algorithm


    【解决方案1】:

    要找到最接近搜索点的点,或按距离递增的顺序获取点列表,您可以使用可以同时保存点和树的内部节点的优先级队列,这样您就可以按顺序删除它们距离。

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

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

    1. 移除优先队列的头部;
    2. 如果队列的头部是一个点,那么它就是树中尚未返回的最近点。你知道这一点,因为如果任何内部节点可能有更近的点,那么它会首先从优先级队列中返回;
    3. 如果队列头是内部节点,则将其子节点放回队列中

    这将按照与搜索点的距离增加的顺序生成树中的所有点。同样的算法也适用于 KD 树。

    【讨论】:

      猜你喜欢
      • 2018-06-16
      • 1970-01-01
      • 2012-09-16
      • 2012-04-15
      • 2018-10-10
      • 2014-10-31
      • 2018-01-06
      • 1970-01-01
      • 2023-03-20
      相关资源
      最近更新 更多