【问题标题】:Point Quadtree Deletion (Samet H.)点四叉树删除 (Samet H.)
【发布时间】:2017-06-14 06:27:30
【问题描述】:

在本书中The design and analysis of spatial data structures 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

等等,这并不是一个真正的解决方案,只是我的一种心理游戏...... 所以我的问题是,有人可以解释这个问题是什么吗?或者我怎么能解决这个问题? (请注意,上面的链接中给出了完整的描述)

【问题讨论】:

  • 当您在四页后找到解决方案时,何必担心呢?
  • 请参考您认为的解决方案是什么?我只看到“J
  • 对不起,你是对的,代码不完整。

标签: algorithm computational-geometry spatial quadtree


【解决方案1】:

我的理解:

扫描候选人,然后记住

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

  • 到目前为止 L1 指标最小的候选者。

那么,如果你没有找到第一个候选人,就使用最后一个。

【讨论】:

  • 是的,这也是我的理解,但事实证明,“对于所有四个象限,候选者“比这些轴同一侧的任何其他候选者更接近其每个边界轴”所以远的。”比看起来对我来说更困难,我无法让它工作!
  • 好吧,我会尝试一种非常简单的方法并更新我的答案/评论。
  • 好吧,这真的行不通,因为您需要比较的不是点而是相应轴上的坐标,这取决于您所在的象限。如果您有解决方案,请随时分享:)
猜你喜欢
  • 1970-01-01
  • 2015-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-09
  • 2012-10-01
相关资源
最近更新 更多