【发布时间】:2011-01-10 06:21:37
【问题描述】:
如何从包含共线边的多边形中提取简单多边形? 对于下面非常简单的情况,边 2-3 和 6-0 是共线的。我想将其分隔为 0、1、2 和 3、4、5、6。
我可以比较每条边与其他每条边的共线性,但这是一种缓慢的 O(n^2) 方法。有更快的方法吗?
【问题讨论】:
标签: algorithm geometry polygon computational-geometry
如何从包含共线边的多边形中提取简单多边形? 对于下面非常简单的情况,边 2-3 和 6-0 是共线的。我想将其分隔为 0、1、2 和 3、4、5、6。
我可以比较每条边与其他每条边的共线性,但这是一种缓慢的 O(n^2) 方法。有更快的方法吗?
【问题讨论】:
标签: algorithm geometry polygon computational-geometry
找到一个边界圆。计算边界圆与每条边所在的线之间的上/右交点。这是 O(n)。现在通过它的角度元组和它与边界圆相交的角度位置对每条边进行排序。这是 O(nlogn),并且会将共线的边分组到您的排序列表中。
如果您不太可能有很多平行但不共线的边,那么您可以跳过边界圆的事情,只按角度排序。如果有很多平行的非共线角度,那么仅使用角度仍然“有效”,只是不会为您带来几乎一样多的效率提升。
【讨论】:
你能找到 1-2 和 6-0 的交集吗?如果是这样,您可以生成边和顶点的图。然后,找到所有不重叠的多边形就很简单了。
【讨论】: