常用的线段裁剪算法有三种:【1】Cohen_SutherLand裁剪算法,【2】中点分割裁剪算法,【3】参数化方法。
1. Cohen_SutherLand裁剪算法
为了能快速的判断一条直线与矩形窗口属于何种位置关系,Cohen_SutherLand裁剪算法采用如下的编码方案,因此又称为“编码裁剪算法”。
在编码裁剪算法中采用了如下图所示的空间划分和编码方案:
编码的[上, 下, 右, 左], 即上: 1000, 下:0100,右:0010, 左:0001,分别对应的十进制数: 上:8, 下:4, 右:2, 左:1。所以在矩形窗口(包含四个边的边界)左上,左下,右上,右下编码如下图。
裁剪一条线段时,先求出两端点所在的区号code1和code2,有如下情况:
(1)若code1 = 0且code2 = 0,则说明线段的两个端点均在窗口内,那么整条线段必在窗口内,应取之,直线可以直接显示;
(2)若code1和code2经按位与运算的结果不为0,则说明两个端点同在窗口的上 方、下方、左方或右方。这种情况下,对线段的处理是弃之,直线不进行显示。
(3)如果上述两种条件都不成立,则按第三种情况处理。求出线段与窗口某边的交点,在交点处把线段一分 为二,其中必有一段完全在窗口外,可弃之,对另一段则重复上述处理,如线段P1P2, 则最终得到的显示线段为P3P4,即为裁剪后的线段,然后进行显示。
算法分析:
因为需要对窗口的不同防线进行编码,所以只适合方形的窗口,不适合圆形的窗口裁剪处理。
程序如下:
原文:http://www.cnblogs.com/icmzn/p/5074761.html