我在四叉树中存储了一组点。一旦用点创建了四叉树,我就将所有边添加到四叉树中,这样每条边都会存储在它穿过,开始或结束的所有叶节点中。
现在,我有一个观点,比如A,我需要找到最接近它的边缘。在我当前的算法中,我递归到包含此点A的叶节点,并找到A与该叶节点包含的所有线段 之间的距离。 现在这可能看起来是正确的解决方案,但它不是因为我必须比较相邻节点中的边缘以及能够给出准确的答案。
现在我的问题是
a)如何提取最近的边缘?
b)我应该只比较父节点(到兴趣点)节点中包含的所有边缘吗? (但我知道一个事实是,根据直觉对一个必须找到最近边缘的等级数量进行严格限制是不正确的)
答案 0 :(得分:2)
四叉树上的每个节点代表一个空间中的立方体(某些边可能是无限的),您可以计算该立方体与目标点A之间的最小距离。请注意,对于包含A的立方体,距离为0
从根节点开始,您必须计算每个子多维数据集(节点)到A的距离,并将其插入到最小堆中。
迭代地,您在堆顶部获取最近的多维数据集并重复该过程。当您到达某个叶节点时,您只需使用强力搜索其中最近的A边缘。
一旦立方体在堆顶部的距离大于到目前为止找到的最近边缘的距离,就可以停止搜索。
更新:顺便说一句,这实际上是使用四叉树或kd树或大多数空间结构搜索任何内容的一般方法。
答案 1 :(得分:0)
您可以尝试使用voronoi图并仅在voronoi单元格内查找边缘。