从具有共线边缘的多边形中提取多边形

时间:2011-01-10 06:21:38

标签: algorithm geometry polygon computational-geometry

如何从包含共线边缘的多边形中提取简单多边形? 对于下面非常简单的情况,边缘2-3和6-0是共线的。我想将其分为0,1,2和3,4,5,6。

我可以将每个边缘的共线性与每个其他边缘进行比较,但这是一种缓慢的O(n ^ 2)方法。有更快的方法吗?

alt text

2 个答案:

答案 0 :(得分:2)

找到一个边界圆。计算边界圆与每个边缘所在的线之间的上/右交点。这是O(n)。现在按照角度的元组和与边界圆的交点的角度位置对每条边进行排序。这是O(nlogn),并将在您的排序列表中将共线边缘组合在一起。

如果你不太可能有很多平行但非共线的边缘,那么你可以跳过边界圆的东西,只是按角度排序。如果有很多平行的非共线角度,那么只使用角度仍然“有效”,它只是不会给你带来几乎同样的效率提升。

答案 1 :(得分:0)

你能找到1-2和6-0的交点吗?如果是这样,您可以生成边和顶点的图形。然后,找到所有非重叠多边形很简单。