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