我在四叉树中存储了一组点使用这些点创建四叉树之后,我将所有边添加到四叉树中,以便每个边存储在其交叉、开始或结束的所有叶节点中。
现在,我有一个点,比如A,我需要找到最靠近它的边。在我当前的算法中,我递归到包含此点A的叶节点,并查找A与此叶节点包含的所有线段之间的距离。
现在这看起来像是正确的解决方案,但这并不是因为我必须比较相邻节点中的边才能给出准确的答案。
现在我的问题是
a)如何提取最近的边?
b)我应该只比较父节点(与关注点)中包含的所有边吗?
(但我知道一个事实,根据直觉,严格限制一个人必须上到的层数才能找到最近的边是不正确的)
最佳答案
四叉树上的每个节点表示空间中的一个立方体(其中某些边可能在无穷远处),您可以计算该立方体与目标点a之间的最小距离。请注意,对于包含a的立方体,该距离为0。
从根节点开始,必须计算其每个子多维数据集(节点)到A的距离,并将其插入最小堆中。
迭代地,在堆的顶部得到最近的立方体,然后重复这个过程。当到达某个叶节点时,只需使用蛮力搜索到它内部最接近的边。
一旦堆顶部立方体的距离大于迄今为止找到的最近边的距离,就可以停止搜索。
更新:顺便说一下,这实际上是使用四叉树、kd树或可能是大多数空间结构搜索任何内容的一般方法。
关于algorithm - 在四叉树中找到最近的相邻边,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29471249/