我需要一个好的(强大的)算法,用于通过线段将多边形分成两组(左/右)。我的多边形表示只是一个整数坐标列表(顺序时钟顺序,从不自相交),线段由起点和终点表示。该行始终在多边形外部开始和结束,即与多边形相交偶数次。
以下是一个例子:
算法的输出应该是两组(顺时针行进):
我可以通过迭代多边形并检查多边形线段是否穿过线来识别点A-H,注意遵守边界情况。我还可以确定每条多线所属的哪一侧。但是,对于我的生活,我不能决定如何将这些片段串联在一起。
在你建议使用通用剪辑库之前:我正在使用提升多边形,它非常善于相互修剪多边形,但是我没有找到任何可以让你在一个线段上剪切多边形的库而它不是通常可以将线段转换为我可以剪辑的多边形。
编辑:我错过了FEF以及多边形可以在线段两侧都有零件的事实。答案 0 :(得分:0)
For each intersection of the polygon border with the line segment:
Add a new point to the polygon.
Remember the new points in a new-point set.
Add the original polygon to the polygon set.
For each pair of points in the new-point set:
For each polygon in the current polygon set:
If the line segment between the points is completely inside the polygon.
Replace the polygon in the polygon set with two polygons
generated by dividing the original polygon along the line
segment between the points.
For each polygon in the polygon set:
Add it to the Left result set or the Right result set.
(Note this may not be possible.
Consider your example of the segment starting between C and F:
You will end up with a polygon (GABCFG) that touches both
sides of the dividing segment. Is that a Left or a Right?
答案 1 :(得分:0)
我已经解决了类似的问题,但我放弃了试图变得聪明。
答案 2 :(得分:0)
好的,这是一个如何得出答案的相当简单的方法:
从顺时针行进轮廓所订购的交叉点开始:
根据距离行首的距离对它们进行排序:
我们还需要记住每个点是否是从左到右或从右到左的交叉点。