Cohen-SutherLand算法(编码算法)

来自http://supportopensource.iteye.com/blog/678480

基本思想:对于每条线段P1P2,分为三种情况处理: 
(1)若P1P2完全在窗口内,则显示该线段,简称“取”之; 
(2)若P1P2明显在窗口外,则丢弃该线段,简称“弃”之; 
(3)若线段既不满足“取”的条件,也不满足“弃”的条件,则把线段分为两段。其中一段完全在窗口外,可弃之。然后对另一段重复上述处理。 
为了使计算机能够快速的判断一条线段与窗口属于何种关系,采用如下编码方法:把窗口的边界延长成直线,窗口平台就分成9个分区,每个区设定一个4位的编码与之对应。 
平面上每一条直线的端点根据其所在的区域都可定义出两个编码。 
编码(以二进制形式自右向左给出)的意义如下: 
(1)第0位:如果端点在窗口左边界左侧,则为1,否则为0; 
(2)第1位:如果端点在窗口右边界右侧,则为1,否则为0; 
(3)第2位:如果端点在窗口下边界下侧,则为1,否则为0; 
(4)第3位:如果端点在窗口上边界上侧,则为1,否则为0。 

 

裁剪一条线段时,先求出端点p1和p2的编码code1和code2: 
(1)如果code1和code2均为0,则说明P1和P2均在窗口内,那么线段全部位于窗口内部,应取之。(c) 
(2)如果code1和code2经过按位与运算后的结果code1&code2不等于0,说明P1和P2同时在窗口的上方、下方、左方或右方,那么线段全部位于窗口的外部,应弃之。(e,d) 
(3)如果上述两种条件均不成立,则可按如下方法处理:求出线段与窗口边界的交点,在交点处把线段一分为二,其中必有一段完全在窗口外,可以弃之。再对另一段重复进行上述处理,直到该线段完全被舍弃或者找到位于窗口内的一段线段为止。(a,b,d’) 

 

此方法直观而方便,速度也较快。但是: 
(1)由于采用按位与运算,对程序的实现有特殊的要求; 
(2)全部舍弃的判断只适合于那些仅在窗口同一侧(后左、或右、或上、或下)的线段。 

 

算法的特点: 
     (1)特点:用编码方法可快速判断线段--完全可见和显然不可见。 
     (2)特别适用二种场合: 
          大窗口场合; 
          窗口特别小的场合(如:光标拾取图形时,光标看作小的裁剪窗口) 

例:根据区域编码裁剪算法对P1P2(P1[80,75],P2[-40,0])进行裁剪,以图解形式说明裁剪的过程(已知:XL=0,XR=100,YB=0,YT=50)。 

 

 


  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值