繁体   English   中英

Octree最近的邻居搜索

[英]Nearest neighbor search in Octree

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

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

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

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

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

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

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

6)返回最接近的点

但是我不能为此想出一个很好的逐步可视化方法。

要查找最接近搜索点的点,或按距离增加的顺序获取点列表,可以使用优先级队列,该队列可以同时包含点和树的内部节点,从而可以按距离顺序将其删除。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM