【问题标题】:Closest pair of features between two 2d concave polygons两个二维凹多边形之间最近的一对特征
【发布时间】:2012-02-16 22:54:11
【问题描述】:

问题是找到两个二维凹多边形之间最近的特征。特征可以是顶点、边。所以结果可以是特征的任意组合。有没有比 O(m*n) 更复杂的简单解决方案?其中 m, n - 分别为多边形的边数。多边形是共面的。

【问题讨论】:

  • n 是什么?多边形是共面的吗?
  • 修正复杂度公式。
  • 什么是n?多边形的数量不总是2吗?
  • 哦,我明白了。 m 是第一个的边/顶点的数量,n 是第二个的数量。
  • 什么是“最接近的特征”?

标签: algorithm computational-geometry


【解决方案1】:

O(n.log(m)) 中的算法似乎存在,请参阅this paperthis question

您可以尝试我的优化: (未测试)

如果您的多边形大部分时间相距足够远,您可以构建两个凸包,然后回到寻找两个凸多边形之间的豪斯多夫距离的最简单问题上(O(n+m) 中的解决方案)。如果距离为 0,则必须回退到 O(m.log(n)) 的情况,但如果您大部分时间处于正距离的“凸包”情况下,这是值得的。 p>

后脚本。我刚刚意识到,为了使假设起作用,您还需要检查凸包中最接近的特征是否属于原始凹多边形。如果没有,很容易找到反例(想象一个形状为字母 C 的多边形,附近有另一个圆形:CO)。

更新后的假设是:两个凹多边形之间的 Hausdorff 距离 d 是它们的凸包之间的 Hausdorff 距离,如果 d > 0两个最接近的特征都属于原始多边形。

这方面的证明留给读者作为练习。

【讨论】:

  • 不幸的是,至少在病态的情况下,我相当肯定这个假设意味着这种方法永远不会比 O(mn) 更好。想象一下以下设置:对于所有 a = -n 到 n,a 不等于 0,我们有 {(0, 0.1)} 和 {(-1, 0), (a, -0.5), (1, 0)} . 那么 (-1, 0) 和 (1,0) 是通过凸方法的最近点,但真正的最近点在凸包的另一侧(实际上是距离最近的两个顶点最远的边) .也就是说,凸包方法几乎总是一个很好的近似值。
  • 是的,这就是我说的重点:属于原来的凹多边形。如果你有这个,你暴露的案例就会被覆盖,回到O(m.log(n)) 案例(而不是O(nm))。如果你碰巧总是处于病态的情况下,我的优化显然不会带来任何东西,但是经验表明,很多时候你必须在真实数据中支持病态的情况不到百分之几的时间——但你仍然必须支持它。
  • 您的分析对于任意(可能是凹的)顶点的问题是完全正确的,但是请记住O(m log(n)) - 或者更准确地说是O(m log(n) + n log(m)) - 案例不处理边,而是离散集(相当于顶点)。我的病态案例被设计成最接近的特征是边缘——我不知道非离散凹集的O(m log(n))算法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-03
  • 1970-01-01
  • 1970-01-01
  • 2013-02-24
  • 2011-03-20
  • 2019-12-07
  • 1970-01-01
相关资源
最近更新 更多