【问题标题】:Multiple convex polygon intersection多个凸多边形相交
【发布时间】:2017-07-05 10:12:43
【问题描述】:

我有多个相交的凸多边形。我想找到其中许多相交的区域。 在图像中,可以将其视为“高峰”。我正在寻找当地的山峰。

我有软件可以相交两个多边形。现在我正在考虑如何计算峰值,而不计算所有可能的交点(指数时间!)。

有人有提示吗?

【问题讨论】:

    标签: geometry polygon computational-geometry intersection convex-polygon


    【解决方案1】:

    给定 k 个凸多边形。让我们假设我们有以 n 条线段的形式给出的所有多边形的边界。每条线段都有对其所属多边形及其内侧的参考。让我们按照 x 坐标对线段的顶点进行排序。现在我们开始从左到右的线扫描。

    在扫描过程中,多边形开始和结束最多为 O(k) 次,因为所有多边形都是凸的。在这样的开始事件中,我们查看扫描线状态并确定我们周围有多少其他多边形。这需要 O(n) 时间。

    对于 n 段,线扫描为您提供 O(n log n + k^2) 时间内的所有交点,加上我们获得 O(n log n + k^2 + kn) 时间的开始事件的处理。使用线段的参考应该可以为每个区域(线段)分配当前覆盖多边形的数量。

    【讨论】:

    • 感谢您的快速答复!
    • 如果我的理解正确,那么下面的例子就行不通了:两个菱形多边形在中间相交,但它们的左右部分不相交。扫描线从左到右,因此在多边形的每个起点,我们计算 1 个多边形,在最后,我们计算 0 个多边形。这样我们就错过了路口,对吧?
    • @yar 扫描线方法的主要优点是我们可以找到这些交叉点。正如我们已经知道在这样的交叉点之前嵌套了多少多边形,我们只需要根据交叉点的类型增加或减少分配给各个线段的数量即可。正如我们所知道的段的相对内部在哪里,我们可以在本地决定做什么。
    • 将这种方法扩展到 3D 凸多面体是否有意义,或者有更好的方法吗?
    • 这种方法在 2D 案例中相对简单,在 CG 中很常见。我可以想象可以将其扩展到 3D。但是,它会复杂得多。我们将使用扫描平面,并且与多面体的每个相交都会再次在扫描平面中产生凸多边形。尽管如此,捕捉一个与另一个面相交的多面体的边缘将是一项挑战,在任何情况下都可能不得不求助于射线拍摄或其他方法。
    猜你喜欢
    • 1970-01-01
    • 2012-10-17
    • 2010-10-19
    • 2016-05-19
    • 2017-03-17
    • 1970-01-01
    • 2012-03-13
    • 2015-08-17
    • 1970-01-01
    相关资源
    最近更新 更多