Cohen-Sutherland 算法 (编码算法),由Dan Cohen和Ivan Sutherland在1974年提出。
一、 Cohen-Sutherland 算法 思想
对每条线段分三种情况处理
1)若线段完全在窗口之内,则显示该线段,称为“取”;
2)若线段明显在窗口之外,则丢弃该线段,称为“弃”
3)求线段与窗口边界所在直线交点,该点把线段分割为两段。其中一段完全在窗口之外,可弃之;对另一段则重复上述处理。
问题:根据算法思想,如何快速判定如下所示直线的取、弃、裁的情况?
二、 Cohen-Sutherland 算法的编码与分区
对于线段任一端点(x,y),根据其坐标所在的区域,赋予一个4位的二进制码D3D2D1D0(上下右左)。
给定直线端点的编码后,根据端点编码,决定直线的取、弃、裁三种情况:
1)取之:线段在窗口内部. 端点的编码code1与code2都为0000,不需要裁剪
2)弃之:端点编码都不为0000. code1与code2按位与不为0,整条线段都在某边界的外侧,应被裁剪掉
3)裁之:端点编码都不为0000. code1与code2都在窗体外部;或者至少一个端点在窗体外部。
三、 Cohen-Sutherland 算法中直线求交
定义窗体:
四、 Cohen-Sutherland 算法实现
1. 算法流程图
2. 编码实现
3. 裁剪实现
4. 裁剪示例