本书 空间数据结构的设计与分析 P.56 有人提到
一旦找到候选节点集,就会尝试找到"最佳"候选节点,该候选节点将成为替换节点。选择最佳候选人有两个标准。标准 1 规定候选人的选择比这些轴同一侧的任何其他候选人更靠近其每个边界轴(如果存在这样的候选人)
我试图实现这一点,但无法真正弄清楚这个算法应该如何工作。 我开始非常简单,创建了两个排序列表,一个按 x 的差异排序,另一个按 y 的差异排序,如果两个对象相同,那么这个对象/点将是我的结果。如果没有,那么我要么没有候选人,要么可能是 2 个,这就是我陷入困境的地方!
另一个应用程序有点奇怪,但我仍然会显示伪代码,也许有人有一个想法
function chooseCandidate(candidate)
clockwiseCandidate = candidate.cQuad(candidate.index) // Index is from 0-3 and cQuad returns (index-1)%4
counterClockwiseCandidate = candidate.ccQuad(candidate.index)
if candidate.x < ccCandidate.x:
possibleWinner = candidate
else if candidate.y < cCandidate.y:
possibleWinner = candidate
等等,这不是一个真正的解决方案,只是我的一个心理游戏...... 所以我的问题是,有人可以解释这个问题是什么吗?或者我该如何解决这个问题?(请注意,上面的链接中给出了完整的描述)
我的理解:
扫描候选人,并记住
-
对于所有四个象限,到目前为止,候选人"比这些轴同一侧的任何其他候选人更接近其每个边界轴"。
-
到目前为止具有最低 L1 指标的候选项。
然后,如果您没有找到第一种候选人,请使用最后一种。