问题是重绘一个自相交的2D多边形,其边界始终是其内部和外部之间的分隔线,并且在某些点上完全交叉(也就是说,在这些点中,多边形内部切换到边界,从左到右,反之亦然。)
最简单的算法是什么?
初始多边形(左)和重绘(右):
我添加了另一个,一个更复杂的初始多边形示例,它仍然非常简单(它只有一个自相交顶点)in this third picture,其中多边形内部被填充(点A,B,C ,D,E最初在绘制多边形边框时按字母顺序显示。)
答案 0 :(得分:0)
你所问的并不是那么简单。
您可以使用扫描线程序。一般原则如下。
在多边形上绘制水平线时,它会遇到偶数个边。从左到右对交叉点进行排序,并将它们成对链接,即可获得内部线段。
如果对横向的所有位置执行此操作,则会在多个单调链中分解多边形,即折线始终向下。
当多边形很简单时,链条在顶点成对出现,在另一个顶点成对消失,并且生活在自己的生命中。但是当多边形交叉时,链条可以相互交叉。这可以通过以下事实来检测:从水平的一个位置到下一个位置,交叉点的顺序会发生变化。
现在你必须通过" uncrossing"来解决这个问题。链,通过在交叉点处分割边缘来完成。
我无法在这里发展更多,尝试和查找"扫描线算法"。