Cohen-Sutherland算法概述

思想
通过对于任一端点(x,y),根据其坐标所在的区域,赋予一个4位的二进制码,判断图形元素是否落在裁剪窗口之内并通过求交运算找出其位于内部的部分。

编码方式
注意:l为left,r为right,b为bottom,t为top

(1)若x小于wxl,D0=1,否则D0=0
(2)若x大于wxr,D1=1,否则D1=0
(3)若y小于wyb,D2=1,否则D2=0
(4)若y大于wyt,D3=1,否则D3=0
在这里插入图片描述

裁剪一条线段时,先求出端点p1和p2的编码code1和code2:
(1)如果code1和code2均为0,则说明P1和P2均在窗口内,那么线段全部位于窗口内部,应取之。
(2)如果code1和code2经过按位与运算后的结果code1&code2不等于0,说明P1和P2同时在窗口的上方、下方、左方或右方,那么线段全部位于窗口的外部,应弃之。
(3)当(1)和(2)不满足时,确保p1在窗口外部:若p1在窗口内,则交换p1和p2的坐标值和编码。
(4)求出直线段与窗口边界的交点,并用该交点的坐标值替换p1的坐标值。也即在交点s处把线段一分为二。考虑到p1是窗口外的一点,因此可以去掉p1s。转(2)。
(5)用直线扫描转换算法画出当前的直线段p1p2。
(6)算法结束。

算法的流程图
在这里插入图片描述

缺陷
(1)但是是对于在裁剪窗口直线内的线段,求交过程复杂,并且包含加、乘法、除法、浮点运算等,不利于硬件实现。
(2)由于采用编码思想,涉及到按位与运算,对程序的实现有特殊的要求;
(3)全部舍弃的判断只适合于那些仅在窗口同一侧(后左、或右、或上、或下)的线段。对于在裁剪窗口直线内的线段此算法不是很方便。

参考
https://blog.csdn.net/sinat_34686158/article/details/78745216

https://blog.csdn.net/vincent2610/article/details/47948737

更多内容访问omegaxyz.com
网站所有代码采用Apache 2.0授权
网站文章采用知识共享许可协议BY-NC-SA4.0授权
© 2018 • OmegaXYZ-版权所有 转载请注明出处

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值