おたくのスタジオ

Weiler Atherton算法

在算法中,裁剪窗口,被裁剪多边形可以是任意多边形:凸的、凹的(内角大于180度)、甚至是带有内环的。

裁剪窗口和被裁剪多边形处于完全对等的地位,这里我们称:

1、被裁剪多边形为主多边形,记为A;

2、裁剪窗口为裁剪多边形,记为B。

观察下图不难发现裁剪结果区域的边界由被裁剪多边形的部分边界和裁剪窗口的部分边界两部分构成,并且在交点外边界发生交替,即由被裁剪多边形的边界转至裁剪窗口的边界,或者反之。由于多边形构成一个封闭的区域,所以,如果被裁剪多边形和裁剪窗口有交点,则交点成对出现。这些交点分为两类:

1、一类称为入点,即被裁剪多边形由此点进入裁剪窗口,如图中a、c、e;

2、一类称为出点,即被裁剪多边形由此点离开裁剪窗口,如图中b、d、f。

Weiler-Atherton-a

假设被裁剪多边形和裁剪窗口的顶点都按顺时针方向排列,当两个多边形相交时,交点必然成对出现,其中一个是入点,另一个是出点。算法从被裁剪多边形的一个入点开始,碰到入点,沿着被裁剪多边形按顺时针方向搜集顶点序列;而当遇到出点时,则沿着裁剪窗口按顺时针方向搜集顶点序列。按上述规则,如此交替地沿着两个多边形的边线前进,直到回到起始点。这时,收集到的全部顶点序列就是裁剪所得的一个多边形。由于可能存在分裂多边形,因此算法还要考虑:将搜集过的入点的入点记号删去,以免重复跟踪。将所有的入点搜集完毕后算法结束。

参考:

1.http://blog.csdn.net/yangxi_pekin/article/details/37738219