【问题标题】:Finding the nearest neighboring edge in a Quadtree在四叉树中找到最近的相邻边
【发布时间】:2015-04-06 12:22:57
【问题描述】:
我在四叉树中存储了一组点。使用这些点创建四叉树后,我会将所有边添加到四叉树中,这样每条边都会存储在它所交叉、开始或结束的所有叶节点中。
现在,我有一个点,比如说 A,我需要找到最接近它的边。在我当前的算法中,我递归到包含此点 A 的叶节点,并找到 A 与此叶节点包含的所有线段 之间的距离。
现在这可能看起来是正确的解决方案,但并不是因为我必须比较相邻节点中的边才能给出准确的答案。
现在我的问题是
a)如何提取最近的边缘?
b)我应该只比较父节点(到兴趣点)中包含的所有边吗?
(但我知道,根据直觉,对必须向上找到最近边缘的层数进行硬性限制是不正确的)
【问题讨论】:
标签:
algorithm
graph
quadtree
spatial-index
【解决方案1】:
四叉树上的每个节点都代表空间中的一个立方体(其中某些边可能处于无穷大),您可以计算该立方体与目标点 A 之间的最小距离。请注意,对于包含 A 的立方体,该距离为 0 .
从根节点开始,您必须计算其每个子立方体(节点)到 A 的距离并将其插入到最小堆中。
迭代地,您会在堆顶部获得最近的立方体并重复该过程。当您到达某个叶节点时,您只需使用蛮力在其中搜索离 A 最近的边。
一旦堆顶立方体的距离大于目前找到的最近边的距离,就可以停止搜索。
更新:顺便说一句,这实际上是使用四叉树或 kd-tree 或大多数空间结构搜索任何内容的一般方法。
【解决方案2】:
您可以尝试 voronoi 图并仅在 voronoi 单元内查找边缘。