给定由边界点表示的 N 多边形,找到所有相交的多边形组。
例如,输入[polygon_A, polygon_B, polygon_C, polygon_D]
如下所示,输出[(polygon_A, polygon_B), (polygon_B, polygon_C)]
(请注意,polygon_A是包含uniq_ID
和list[points]
的结构。)
我是否有可能比O(n ^ 2)更快地处理(假设每个多边形包含不超过10个点)
答案 0 :(得分:1)
您可以将轮廓视为独立线段的集合,并使用(例如)扫描线技术查找所有交叉点。复杂性达到O((n+k) log n)
,其中k
是有效的交叉点数。
https://en.wikipedia.org/wiki/Line_segment_intersection https://fr.wikipedia.org/wiki/Algorithme_de_Bentley-Ottmann
在您的情况下,如果多边形是紧凑和分散的,您还可以考虑它们的轴对齐边界框并找到重叠。已知O(n log n + k)
算法。