直线段裁剪(4/15) 假定条件 a矩形裁剪窗口:[xmin,xmax] XImin,ymax] 待裁剪线段:P(xy)P(x2y) 任何平面线段相对于凸多边形窗口进行裁剪后?
6 直线段裁剪(4/15) 假定条件 ◼ 矩形裁剪窗口:[xmin,xmax]X[ymin,ymax] ◼ 待裁剪线段: 任何平面线段相对于凸多边形窗口进行裁剪后? P x y P x y 0 0 0 1 1 1 ( , ) ( , )
直线段裁剪(5/15) 待裁剪线段和窗口的关系 完全落在窗口内 完全落在窗口外 部分在内,部分在外 H E ymin Xmin Xm ax
7 直线段裁剪(5/15) 待裁剪线段和窗口的关系 ◼ 完全落在窗口内 ◼ 完全落在窗口外 ◼ 部分在内,部分在外
直线段裁剪(6/15) 为提高效率,算法设计时应考虑: 1.快速判断情形(1)2) 2.设法减少情形(3)求交次数和每次求交时所需的计算量
8 直线段裁剪(6/15) 为提高效率,算法设计时应考虑: 1. 快速判断情形(1)(2); 2. 设法减少情形(3)求交次数和每次求交时所需的计算量
直线段栽剪(7/15) Cohen-Sutherland算法(编码算法) 算法步骤 第一步判别线段两端点是否都落在窗口内,如果是, 则线段完全可见;否则进入第二步; 第二步判别线段是否为显然不可见,如果是,则裁 剪结束;否则进行第三步; 第三步求线段与窗口边延长线的交点,这个交点将 线段分为两段,其中一段显然不可见,丢弃。 对余下的另一段重新进行第一步,第二步判断, 直至结束 裁剪过程是递归的
9 Cohen-Sutherland 算法 (编码算法) 算法步骤: 第一步 判别线段两端点是否都落在窗口内,如果是, 则线段完全可见;否则进入第二步; 第二步 判别线段是否为显然不可见,如果是,则裁 剪结束;否则进行第三步 ; 第三步 求线段与窗口边延长线的交点,这个交点将 线段分为两段,其中一段显然不可见,丢弃。 对余下的另一段重新进行第一步,第二步判断, 直至结束 裁剪过程是递归的。 直线段裁剪(7/15)
直线段裁剪(8/15) Cohen-Sutherland算法 特点 对显然不可见线段的快速判别 编码方法: 由窗口四条边所在直线把二维平面分成9个区域,每个区域赋予一个四 位编码,CCcC,上下右左; vmaX ly<ymin else o else 10011100011010 ymax 000100000010 x>xmax 1当x< x min ymin 01011010 0110 0 else 0 else min Xm ax
10 特点: ◼ 对显然不可见线段的快速判别 编码方法: ◼ 由窗口四条边所在直线把二维平面分成9个区域,每个区域赋予一个四 位编码,CtCbCrCl,上下右左; = else y y Ct 0 1 当 max = else x x Cr 0 1 当 max = else x x Cl 0 1 当 min = else y y Cb 0 1 当 min Cohen-Sutherland 算法 直线段裁剪(8/15)