划分自相交多边形的算法

时间:2014-03-27 16:15:47

标签: c# algorithm polygon computational-geometry

首先我知道已经有类似的问题,但它使用了不同的结构并且在C(Divide self intersecting polygon (C Code))中,我的问题有点不同。

我有自相交多边形的点,它的边缘以及我能够使用Bentley-Ottmann算法找到它与自身相交的点。

我计划通过编辑交叉点周围的边来构建非自相交多边形,但问题是当你有两条相交的边时,你不知道四边中哪两边在里面,哪边在多边形之外。

我可以使用光线穿越算法来解决这个问题,但它太慢了。它的时间复杂度是O(n),而且每个交点我至少要做两次。因此,大约200k点的多边形会非常慢。

所以我要问的是,有没有更快的方法将自交叉多边形划分为非自相交的多边形。

我需要这个因为我正在进行多边形三角测量。我已经完成了扫描线三角剖分算法,用于对带孔的非自相交多边形进行三角剖分。所以我只需要将这些多边形的数组作为输入。

1 个答案:

答案 0 :(得分:1)

作为预处理步骤,您可以计算每条边,边的哪一边确定多边形的外部。这比每个交叉点的O(n)时间便宜得多。然后,当两条边相交时,您可以确定哪两条线在外面,哪两条线在内。