Geometry 多重凸多边形相交

Geometry 多重凸多边形相交,geometry,polygon,computational-geometry,intersection,convex-polygon,Geometry,Polygon,Computational Geometry,Intersection,Convex Polygon,我有多个相交的凸多边形。我想找到这些区域,在这些区域中有很多是相交的。 在图像中,人们可以将其视为一个“峰值”。我正在寻找当地的山峰 我有两个多边形相交的软件。现在我在考虑如何计算峰值,而不计算所有可能的交点(指数时间!) 有人有提示吗?给定k个凸多边形。假设所有多边形的边界都以n条线段的形式给出。每条线段都有一个对其所属多边形及其内侧的参照。让我们按照线段的x坐标对其顶点进行排序。现在我们开始从左向右扫线 在最多扫描O(k)次的过程中,多边形开始和结束,因为所有多边形都是凸的。在这样的开始事件

我有多个相交的凸多边形。我想找到这些区域,在这些区域中有很多是相交的。 在图像中,人们可以将其视为一个“峰值”。我正在寻找当地的山峰

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


有人有提示吗?

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

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


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

谢谢你的快速回答!如果我理解你的话,那么下面的例子就不行了:两个菱形多边形在中间相交,但它们的左右部分不相交。扫描线从左向右移动,因此在多边形的每个开始处,我们计算1个多边形,在结束处,我们计算0个多边形。这样我们就错过了十字路口,对吗?@yar扫掠线方法的主要优点是我们找到了这些十字路口。因为我们已经知道在这样一个交集之前嵌套了多少个多边形,我们只需要根据交集的类型增加或减少分配给各个线段的数量。当我们知道线段的相对内部位置时,我们可以局部决定要做什么。将这种方法扩展到三维凸多面体有意义吗?或者有更好的方法吗?比如说,这种方法在二维情况下是相对直接的,在CG中是常见的做法。我可以想象,人们可以将其扩展到3D。然而,这将更加复杂。我们将使用扫描平面,并且与多面体的每个交点都将再次在扫描平面中生成凸多边形。尽管如此,捕捉一个多面体与另一个多面体的面相交的边仍然是一个挑战,在任何情况下,都可能不得不求助于光线拍摄或其他方法。