多凸多边形相交
Multiple convex polygon intersection
我有多个相交的凸多边形。我想找到其中许多相交的区域。
在图像中,可以将其视为 "peak"。我正在搜索本地峰值。
我有相交两个多边形的软件。现在我正在考虑如何计算峰值,而不计算所有可能的交点(指数时间!)。
有人有提示吗?
给定k个凸多边形。让我们假设我们有以 n 条线段的形式给出的所有多边形的边界。每条线段都有一个对其所属的多边形及其内侧的引用。让我们按 x-coordinate 对线段的顶点进行排序。现在我们开始从左到右扫线。
在扫描期间最多 O(k) 次多边形开始和结束,因为所有多边形都是凸的。在这样的开始事件中,我们查看扫描线状态并确定我们周围有多少其他多边形。这需要 O(n) 时间。
对于 n 段,直线扫描会在 O(n log n + k^2) 时间内为您提供所有交叉点,加上我们获得 O(n log n + k^2 + kn) 时间的开始事件的处理。使用线段的参考,应该可以为每个区域(线段)分配当前覆盖多边形的数量。
我有多个相交的凸多边形。我想找到其中许多相交的区域。 在图像中,可以将其视为 "peak"。我正在搜索本地峰值。
我有相交两个多边形的软件。现在我正在考虑如何计算峰值,而不计算所有可能的交点(指数时间!)。
有人有提示吗?
给定k个凸多边形。让我们假设我们有以 n 条线段的形式给出的所有多边形的边界。每条线段都有一个对其所属的多边形及其内侧的引用。让我们按 x-coordinate 对线段的顶点进行排序。现在我们开始从左到右扫线。
在扫描期间最多 O(k) 次多边形开始和结束,因为所有多边形都是凸的。在这样的开始事件中,我们查看扫描线状态并确定我们周围有多少其他多边形。这需要 O(n) 时间。
对于 n 段,直线扫描会在 O(n log n + k^2) 时间内为您提供所有交叉点,加上我们获得 O(n log n + k^2 + kn) 时间的开始事件的处理。使用线段的参考,应该可以为每个区域(线段)分配当前覆盖多边形的数量。