直线裁剪算法-Cohen-Sutherland算法
裁剪:使用计算机处理图形信息时,计算机内部存储的图形往往较大,而屏幕显示的只是图形的一部分。因此需要确定图形哪些部分落在显示区内,哪些落在显示区外。这个选择的过程称为裁剪
1、点的裁剪
对任意点P(x,y),若满足以下不等式则P在矩形窗口内;否则,P在窗口之外
2、直线段的裁剪
直线段和裁剪窗口的可能关系:
要裁剪一条直线段,首先要判断:
1)是否完全落在裁剪窗口内
2)是否完全在窗口外
3)如果不满足以上两条,则计算它与一个或多个裁剪边界的交点
Cohen-Sutherland算法
又称为编码裁剪算法,基本思想时对每条直线段分三种情况处理:
1)若P1和P2完全在裁剪窗口内,取之
2)若P1(x1,y1)和P2(x2,y2)均在窗口外,且满足下列四个条件之一,弃之
3)若直线段既不满足“取之”条件,也不满足“弃之”条件则需要对直线段按交点进行分段,分段后判断取之还是弃之
每条线段的端点都赋以四位二进制码D3D2D1D0,编码规则如下:
若X<Xleft,则D0=1,否则D0=0
若X>Xright,则D1=1,否则D1=0
若Y<Ybottom,则D2=1,否则D2=0
若Y>Ytop,则D3=1,否则D3=0
窗口及其延长线所构成了9个区域。根据该编码规则:
D0对应窗口左边界;D1对应窗口右边界;D2对应窗口下边界;D0对应窗口上边界;
裁剪一条线段时,先求出端点P1和P2的编码code1和code2然后进行二进制“或”运算和“与”运算
1)若code1|code2=0,对直线段取之
2)若code1&code2≠0,对直线段弃之
若两个条件均不满足则需求出直线段与窗口边界的交点在交点处把直线段一分为二
Cohen-Sutherland算法用编码的方法实现了对直线段的裁剪
比较适合两种情况:一是大部分线段完全可见;二是大部分线段完全不可见
存在的问题:最坏的情况下,被裁减线段与窗口4条边计算交点,然后所得的裁剪结果却可能时全部舍弃