一类编码裁剪算法
1 二维剪裁
二维剪裁是在三维线段投影到投影平面之后才进行的,并且剪裁窗口是投影平面的一部分,该投影片面投影到屏幕的视口中,所有的值都可用实数表示。AB整段显示,CD整段不显示,EF和GH裁剪后显示
2 原理
为避免求交(所在直线与剪裁窗口各条边的交点)运算,Cohen-Sutherland算法使用浮点减法与位操作相结合的方式代替大量浮点乘法和除法的裁剪算法。
该算法把裁剪窗口的四条边延长,将二维空间分割成9个区域,并赋予每个区域一个唯一的四位二进制数(编码),编码的4位分别代表端点位于窗口的上、下、右、左。
考虑线段$ o_1 $$ o_2 $,对两端点的编码情况进行讨论,有四种情况:
- 若点$ o_1 $和$ o_2 $完全在裁剪窗口内,则保留该直线,如线段AB,然后进行光栅化处理
- 若点$ o_1 $和$ o_2 $有一个端点在裁剪窗口内,如线段CD,非零的端点编码说明线段与剪裁窗口的哪条边或拿两条边相交判断是否要进行两次求交运算
- 若$ o_1 $和$ o_2 $均不为0,对两个端点编码按位与运算,判断是否在同一侧,若是舍弃,如线段EF
- 如果直线段既不满足保留的条件,也不满足舍弃的条件?那么需要对直线段按交点进行分段,分段后判断直线是保留还是舍弃。(如GH与IJ)
当要处理的线段很多,而实际显示的线段很少时,Cohen-Sutherland算法非常有效
3 代码
1 |
|
4 运行结果
参考链接