Cohen- Sutherland算法 旦给定所有的线段端点的区域 码,就可以快速判断哪条直线完 00110001010 全在剪取窗口内,哪条直线完全000100010010 在窗口外。所以得到一个规律: 010101000110
Cohen-Sutherland算法 一旦给定所有的线段端点的区域 码,就可以快速判断哪条直线完 全在剪取窗口内,哪条直线完全 在窗口外。所以得到一个规律:
Cohen- Sutherland裁剪 若P1P2完全在窗口内 codel=0,且code2=0,则“取” 若P1P2明显在窗口外 codel&code2≠0,则“弃” 在交点处把线段分为两段。其中一段完全在窗口外 可弃之。然后对另一段重复上述处理 1001 1000 1010 0001 0010 P4 0101 0100 0110 P2 编码 线段裁剪 浙江大学信息学院 计算机图形学
浙江大学信息学院 计算机图形学 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的边。 计算线段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)/(y2y1);} else if (top code !=0) y=YT;x=x1+(x2-x1)*(YT-y1)/(y2y1);} 具体算法见p201 浙江大学信息学院 计算机图形学
浙江大学信息学院 计算机图形学 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);} 具体算法见p201
Cohen-Sutherland 直线裁剪算法小结 本算法的优点在于简单,易于实现。他可以简 单的描述为将直线在窗口左边的部分删去,按 左,右,下,上的顺序依次进行,处理之后, 剩余部分就是可见的了。在这个算法中求交点 是很重要的,他决定了算法的速度。另外,本 算法对于其他形状的窗口未必同样有效。 特点:用编码方法可快速判断线段的完全可见 和显然不可见。 浙江大学信息学院 计算机图形学
浙江大学信息学院 计算机图形学 Cohen-Sutherland 直线裁剪算法小结 • 本算法的优点在于简单,易于实现。他可以简 单的描述为将直线在窗口左边的部分删去,按 左,右,下,上的顺序依次进行,处理之后, 剩余部分就是可见的了。在这个算法中求交点 是很重要的,他决定了算法的速度。另外,本 算法对于其他形状的窗口未必同样有效。 • 特点:用编码方法可快速判断线段的完全可见 和显然不可见
中点分割裁剪算法 基本思想:从P点出发找出离P0最近的可见点,和从P1 点出发找出离P1最近的可见点。这两个可见点的连线 就是原线段的可见部分 与 Cohen- Sutherland算法一样首先对线段端点进行编 码,并把线段与窗口的关系分为三种情况,对前两种 情况,进行一样的处理;对于第三种情况,用中点分 割的方法求出线段与窗口的交点。A、B分别为距P0 P1最近的可见点,Pm为PP1中点 PO A P B 形学 PI
浙江大学信息学院 计算机图形学 中点分割裁剪算法 • 基本思想:从P0点出发找出离P0最近的可见点,和从P1 点出发找出离P1最近的可见点。这两个可见点的连线 就是原线段的可见部分。 • 与Cohen-Sutherland算法一样首先对线段端点进行编 码,并把线段与窗口的关系分为三种情况,对前两种 情况,进行一样的处理;对于第三种情况,用中点分 割的方法求出线段与窗口的交点。A、B分别为距P0 、 P1最近的可见点,Pm为P0P1中点。 P0 P1 Pm A B