Cohen- Sutherland算法 日给定所有的线段端点的区域码,就可 以快速判断哪条直线完全在剪取窗口内, 哪条直线完全在窗口外。所以得到一个规 律 100110001010 000100000010 010101000110 2021/1/21 浙江大学计算机图形学
2021/1/21 浙江大学计算机图形学 11 Cohen-Sutherland算法 一旦给定所有的线段端点的区域码,就可 以快速判断哪条直线完全在剪取窗口内, 哪条直线完全在窗口外。所以得到一个规 律:
Cohen- Sutherland裁剪 若P1P2完全在窗口内 codel=0,且code2=0,则“取” n若P1P2明显在窗口外 codel&code2≠0,则“弃” n在交点处把线段分为两段。其中一段完全在窗口外, 可弃之。然后对另一段重复上述处理 1001 1000 1010 0001 0000 P3 P4 0101 0100 0110 编码 线段裁剪 2021/1/21 浙江大学计算机图形学 12
2021/1/21 浙江大学计算机图形学 12 Cohen-Sutherland裁剪 ◼ 若P1P2完全在窗口内code1=0,且code2=0,则“取” ◼ 若P1P2明显在窗口外code1&code2≠0,则“弃” ◼ 在交点处把线段分为两段。其中一段完全在窗口外, 可弃之。然后对另一段重复上述处理。 ◼ 编码 线段裁剪 1001 1000 1010 0001 0000 0010 0101 0100 0110 P1 P2 P3 P4
Cohen- Sutherland裁剪 如何判定应该与窗口的哪条边求交呢? 编码中对应位为1的边。 n计算线段P1(X1,y1)P2(X2y2)与窗口边界的交点 if(left&code =0) x=XL;y=y1+(y2-y1)*(XL-x1)/(x2-x1);} else if (rIGhT&code ! =0) x=XR;y=yl+(y2-y1)*(XR-x1)/(x2-x1);} else if (BoTTOM&code !=0) y=YB;x=x1+(x2-x1)*(YB-y1)/(y2y1);} else if (top code =0 y=YT;x=x1+(x2-x1)*(YT-y1)/(y2-y1);} 2021/1/21 浙江大学计算机图形学 13
2021/1/21 浙江大学计算机图形学 13 Cohen-Sutherland裁剪 如何判定应该与窗口的哪条边求交呢? 编码中对应位为1的边。 ◼ 计算线段P1(x1,y1)P2(x2,y2)与窗口边界的交点 if(LEFT&code !=0) { x=XL; y=y1+(y2-y1)*(XL-x1)/(x2-x1);} else if(RIGHT&code !=0) { x=XR; y=y1+(y2-y1)*(XR-x1)/(x2-x1);} else if(BOTTOM&code !=0) { y=YB; x=x1+(x2-x1)*(YB-y1)/(y2-y1);} else if(TOP & code !=0) { y=YT; x=x1+(x2-x1)*(YT-y1)/(y2-y1);}
BE. Cohen-Sutherland 直线裁剪算法小结 本算法的优点在于简单,易于实现。他可以简 单的描述为将直线在窗口左边的部分删去,按 左,右,下,上的顺序依次进行,处理之后, 剩余部分就是可见的了。在这个算法中求交点 是很重要的,他决定了算法的速度。另外,本 算法对于其他形状的窗口未必同样有效 ■特点:用编码方法可快速判断线段的完全可见 和显然不可见 2021/1/21 浙江大学计算机图形学 14
2021/1/21 浙江大学计算机图形学 14 Cohen-Sutherland 直线裁剪算法小结 ◼ 本算法的优点在于简单,易于实现。他可以简 单的描述为将直线在窗口左边的部分删去,按 左,右,下,上的顺序依次进行,处理之后, 剩余部分就是可见的了。在这个算法中求交点 是很重要的,他决定了算法的速度。另外,本 算法对于其他形状的窗口未必同样有效。 ◼ 特点:用编码方法可快速判断线段的完全可见 和显然不可见
中点分割裁剪算法 田 点出发找出离P最近的可见点。这两个可见点的连线 就是原线段的可见部分。 ■与 Cohen- Sutherland算法一样首先对线段端点进行编 码,并把线段与窗口的关系分为三种情况,对前两种 情况,进行一样的处理;对于第三种情况,用中点分 割的方法求出线段与窗口的交点。A、B分别为距P 1最近的可见点,Pm为PP1中点。 PO Pm B 2021/1/21 15
2021/1/21 浙江大学计算机图形学 15 中点分割裁剪算法 ◼ 基本思想:从P0点出发找出离P0最近的可见点,和从P1 点出发找出离P1最近的可见点。这两个可见点的连线 就是原线段的可见部分。 ◼ 与Cohen-Sutherland算法一样首先对线段端点进行编 码,并把线段与窗口的关系分为三种情况,对前两种 情况,进行一样的处理;对于第三种情况,用中点分 割的方法求出线段与窗口的交点。A、B分别为距P0 、 P1最近的可见点,Pm为P0P1中点。 P0 P1 Pm A B