Algorithm 点四叉树删除(Samet H.)

Algorithm 点四叉树删除(Samet H.),algorithm,computational-geometry,spatial,quadtree,Algorithm,Computational Geometry,Spatial,Quadtree,本书第56页 有人提到 一旦找到候选节点集,将尝试查找“最佳”候选节点,该候选节点将成为替换节点。选择最佳候选人有两个标准。标准1规定了比这些轴同一侧的任何其他候选者更靠近其每个边界轴的候选者的选择(如果存在此类候选者) 我试图实现这一点,但不能真正弄清楚这个算法应该如何工作。 我开始时非常简单,创建了两个排序列表,一个按x的差值排序,另一个按y的差值排序,如果两个对象相同,那么这个对象/点就是我的结果。如果没有,那么我要么没有候选人,要么2个,这就是我被卡住的地方 另一种方法有些奇怪,但我仍然

本书第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
函数选择日期(候选)
clockwiseCandidate=candidate.cQuad(candidate.index)//索引从0-3开始,cQuad返回(index-1)%4
逆时针方向的candidate=candidate.ccQuad(candidate.index)
如果候选者.x
等等,这不是一个真正的解决方案,只是我的一个思维游戏。。。 所以我的问题是,有人能解释一下这个问题是什么吗?或者我怎样才能解决这个问题?(请注意,上面的链接给出了完整的描述)

我的理解:

仔细检查候选人,然后记住

  • 对于所有四个象限,到目前为止,“比这些轴同一侧上的任何其他候选轴更接近其每个边界轴”的候选轴

  • 到目前为止具有最小L1度量的候选者


如果您没有找到第一种类型的candidtate,请使用最后一种。

四页之后有了解决方案,为什么还要担心呢?请参考您认为的解决方案是什么?我只看到“对不起,你是对的,代码是不完整的。是的,这也是我的理解,但结果是”对于所有四个象限,到目前为止,候选者“比这些轴同一侧的任何其他候选者更接近其边界轴”。“对我来说,这比看起来更困难,我无法让它工作!好的,我将尝试一种非常简单的方法并更新我的答案/评论。好的,这不会真正起作用,因为您需要比较的不是点而是相应轴上的坐标,坐标的切换取决于您所在的象限。如果您有解决方案,请随时分享:)