得鹿梦鱼 得鹿梦鱼

weiler-Atherton多边形裁剪算法

是一种通用的多边形裁剪算法,可用于裁剪任意多边形,

算法要跟踪填充多边形,并寻找是裁剪后的填充区封闭的边界,这样,多个填充区可以作为分开的,不相连的多边形来识别和显示,为了找到使裁剪后的填充区封闭,必须沿填充区边界,顺时针方向或者逆时针方向,在每次离开裁剪窗口或者进入裁剪窗口时沿裁剪窗口边界走,在裁剪窗口边上的路线与填充区边界上的方向一致
处理方向是逆时针还是顺时针依赖与定义多边形填充区的顶点顺序,多数情况下,作为前向面的定义,顶点队列采用逆时针方向描述,因此,形成凸角的两条相邻边的叉积确定法向量的方向,即从后向面到前向面的方向,在不知道顶点顺序的情况下,可以计算法向量,

处理过程

针对于逆时针的多边形填充区顶点顺序

  1. 按照逆时针方向处理多边形填充区,直到一对内外顶点与某裁剪边界相遇,即多边形的第一顶点在裁剪窗口内二第二顶点在裁剪窗口外
  2. 在窗口边界上从出交点沿逆时针方向到达另一个与多边形的交点,如果该交点式处理边的点,则走向下一步,如果是新交点,则继续按照逆时针方向处理多边形直到遇见已处理的顶点
  3. 形成裁剪后该区域的顶点队列
  4. 回到出交点并继续按照逆时针处理多边形的边