weiler-Atherton多边形裁剪算法
是一种通用的多边形裁剪算法,可用于裁剪任意多边形,
算法要跟踪填充多边形,并寻找是裁剪后的填充区封闭的边界,这样,多个填充区可以作为分开的,不相连的多边形来识别和显示,为了找到使裁剪后的填充区封闭,必须沿填充区边界,顺时针方向或者逆时针方向,在每次离开裁剪窗口或者进入裁剪窗口时沿裁剪窗口边界走,在裁剪窗口边上的路线与填充区边界上的方向一致
处理方向是逆时针还是顺时针依赖与定义多边形填充区的顶点顺序,多数情况下,作为前向面的定义,顶点队列采用逆时针方向描述,因此,形成凸角的两条相邻边的叉积确定法向量的方向,即从后向面到前向面的方向,在不知道顶点顺序的情况下,可以计算法向量,
处理过程
针对于逆时针的多边形填充区顶点顺序
- 按照逆时针方向处理多边形填充区,直到一对内外顶点与某裁剪边界相遇,即多边形的第一顶点在裁剪窗口内二第二顶点在裁剪窗口外
- 在窗口边界上从出交点沿逆时针方向到达另一个与多边形的交点,如果该交点式处理边的点,则走向下一步,如果是新交点,则继续按照逆时针方向处理多边形直到遇见已处理的顶点
- 形成裁剪后该区域的顶点队列
- 回到出交点并继续按照逆时针处理多边形的边