我需要实现绕线数算法来确定(不一定是简单的)多边形的内部和外部区域。
我想到的是将多边形分成简单的区域(这样就不会将区域划分为2个区域),然后在每个区域使用绕组数算法1点,从而确定整个区域的性质。 但是,我无法想出计算所述区域的算法,然后我需要在每个区域内得到一个点(从那里开始,实现绕组数算法非常简单)。
是否有一种简单而有效的算法可以将复杂多边形分解为这些区域?
答案 0 :(得分:0)
在关于points in polygons的维基百科文章的参考文献中,您可以找到关于绕组数算法的有效实现的非常有用的article。文章非常清晰,写得很好!它包括几个例子,伪代码和(幸运的是)在c ++中完整实现的算法。为了理解算法,您可以跳过关于绕组数的数学背景(文章简要解释了它们如何被解释为单位球的同伦类),并且只是阅读了如何以及为什么绕组数可以更容易地表达在此情况下。
顺便说一下,绕组数算法在非简单多边形上运行得非常好。你为什么要先将它们分成简单的区域?上面链接的文章还解释了如何使用交叉数来确定点是否位于简单(!)多边形内。所以我希望这能为您提供足够的信息来决定您是否真的想先拆分多边形。