多边形是由若干直线段围成的封闭图形。裁剪多边形所得到的结果,应该仍是一个多边形,即是一个封闭图形。
多边形和窗口之间可能存在的位置关系如下:
逐边裁剪算法
基本思想:该算法依次用窗口的四条边框直线对多边形进行分步裁剪。先用一条边框直线对整个多边形进行裁剪,得到一个或若干个新的多边形;再用第二条边框直线对这些新产生的多边形进行裁剪。依次类推,直到用四条边框直线都裁剪完,整个多边形的裁剪过程结束。
多边形逐边裁剪算法步骤:
①把待裁剪多边形的各顶点按一定方向有次序地组成顶点序列(P1,P2,…,Pn),相继连接相邻两顶点(P1P2,P2P3,…,Pn-1Pn,PnP1),即组成多边形的n条边。该顶点序列是待处理的输入量。
② 处理输入的顶点序列,结果是产生一组新的顶点序列,然后输出该组新的顶点序列(如Q1,Q2,…,Qm)。该新的顶点序列表示了由m条边组成的新的多边形。
③ 把输出的顶点序列作为新的输入量,再次输入到算法中的第②步,如此重复三次。
具体处理方法:
算法第②步处理顶点序列时,依次检验顶点序列中的每个顶点Pi(i =1,…,n),处于裁剪边框可见侧的顶点被列入新的顶点序列中输出,处于裁剪边框不可见侧的顶点被删除。
还要检验Pi 点和它前一个顶点Pi–1 点是否处于裁剪边框的同侧(对于P1点,其前一个顶点为Pn点)。若不在同一侧,则求出裁剪边框与直线段Pi Pi–1 的交点,并把该交点作为新的顶点列入到新顶点序列中输出。
窗口边框及其延长线构成的裁剪线把平面分成两部分:一部分包含窗口,称为可见一侧;另一部分不包含窗口,称为不可见一侧。
设多边形的任意一条边的端点为S(起点)、E(终点),线段SE与裁剪线的位置关系有四种情况:
(1)端点S和E都在不可见侧,则无任何输出;
(2)端点S和E都在可见侧,则输出端点E;
(3)端点S在可见侧,端点E在不可见侧,则输出线段SE与裁剪线的交点I;
(4)端点S在不可见侧,端点E在可见侧,则输出线段SE与裁剪线的交点I和端点E。