【问题标题】:Polygon-polygon-intersection fails in special casePolygon-polygon-intersection 在特殊情况下失败
【发布时间】:2017-12-11 18:08:22
【问题描述】:

我已经实现了Bentley-Ottmann-algorithm 来检测多边形-多边形相交。这通常效果很好:由于多边形不会自相交,因此两个多边形的线段的联合中的任何线段相交都表明两个多边形都相交。

但如果我看一下这个案例:

没有段交点。但显然两个多边形相交。

如何在不使用简单算法检查另一个多边形中每个多边形的每个点的多边形内点并因此在 O(m*n) 中运行的情况下检测这种情况。

【问题讨论】:

  • 您是否实现了检测段的重合末端?
  • 是的——但是接触(但不相交)多边形呢?
  • 也许 - 在两端相等的情况下考虑相邻段的方向。
  • 在我的情况下,细分不定向:-(
  • 怎么样?在图片上,与公共顶点相关的两个蓝色段都是水平的,两个红色都是垂直的

标签: algorithm geometry polygon computational-geometry


【解决方案1】:

提示

处理特殊情况(例如边上的顶点或两条重叠边)是一个令人不安的话题,因为配置是多种多样的并且案例可以伸缩(想想几个重叠的共线边)。

我最好的建议是通过为每个顶点分配一个内部或外部状态(相对于另一个多边形)来增强一致性。那么当你将一条边与另一个多边形相交时,相交数量的奇偶性必须与端点状态的变化相匹配(相同状态 => 偶数相交)。

我没有具体说明您分配状态的方式,这取决于您的特定算法(实际上,状态是随您分配的)。重要的是,当一个状态被测试时,你不能再改变它了。

如果出现异常(交叉点数量的奇偶性与状态变化不匹配),您必须通过牺牲交叉点或复制一个(或您认为合适的任何其他规则)来解决此问题。

例子:

在此示例中,绿点表示被视为蓝色多边形外部的顶点,数字表示分配给相应边的可接受的交点数。

下面的黑色轮廓表示由这种状态分配产生的联合多边形。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-16
    • 2017-10-19
    • 2013-06-25
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多