思想
通过对于任一端点(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-版权所有 转载请注明出处

Cohen-Sutherland算法概述相关推荐

  1. Sutherland-Hodgeman 和Cohen—Sutherland算法

    一.Cohen-Sutherland剪裁算法 1.基本思想 对于每条线段P1P2分为三种情况处理: (1)若P1P2完全在窗口内,则显示该线段P1P2. (2)若P1P2明显在窗口外,则丢弃该线段. ...

  2. 计算机图形学 实验6 直线的裁剪—Cohen Sutherland裁剪算法(MFC中)

    实验目的: 理解裁剪的作用 掌握直线裁剪的算法 实验内容: 一.编写程序实现Cohen Sutherland裁剪算法 算法原理: 首先判断直线段是否全部在窗口内,是,则保留:不是,则再判断是否完全在窗 ...

  3. Cohen-Sutherland算法

    一.Cohen-Sutherland算法思想 该算法也称为编码算法,首先对线段的两个端点按所在的区域进行分区编码,根据编码可以迅速地判明全部在窗口内的线段和全部在某边界外侧的线段.只有不属于这两种情况 ...

  4. 《计算机图形学》实验报告 Cohen Sutherland裁剪算法

    一.实验目的和要求 熟悉光栅图形学中的相关直线段裁剪算法.理解Cohen-Sutherland裁剪算法. 二.实验内容 实现Cohen-Sutherland编码线段裁剪算法,能看到裁剪前后的屏幕显示效 ...

  5. 目标反射回波检测算法及其FPGA实现 之一:算法概述

    目标反射回波检测算法及其FPGA实现之一:算法概述 前段时间,接触了一个声呐目标反射回波检测的项目.声呐接收机要实现的核心功能是在含有大量噪声的反射回波中,识别出发射机发出的激励信号的回波.我会分几篇 ...

  6. 算法设计与分析第1章 算法概述

    第1章 算法概述(穷举算法) 重要人物:Alan Turing(图灵机).Donald Knuth(TEX系统) 算法:解决问题的一种方法或一个过程 特性:有穷性(Finiteness).确定性(De ...

  7. 推荐系统产品与算法概述 | 深度

    作者丨gongyouliu 转载自大数据与人工智能(ID:gh_b8b5b02c348b) 作者在<推荐系统的工程实现>(点击蓝字可回顾)这篇文章的第五部分"推荐系统范式&quo ...

  8. 史上最全异常检测算法概述

    史上最全异常检测算法概述 参考文章: (1)史上最全异常检测算法概述 (2)https://www.cnblogs.com/Bang-cansee/p/4954129.html 备忘一下.

  9. Data Structures with C++ Using STL Chapter 3算法概述---笔记

    <Data Structures with C++ Using STL Chapter 3算法概述---笔记>,作者:茉莉花茶,原文链接:http://www.cnblogs.com/yc ...

  10. caliop 数据可视化_星载激光雷达CALIOP数据处理算法概述

    收稿日期 : 2017-08-05 : 修订日期 : 2017-11-27 基金项目 : (2016YFC0200700 , 2016YFC1400902 , 2016YFC400905) : (41 ...

最新文章

  1. python中datetime模块常用方法_Python中datetime的使用和常用时间处理
  2. 最短路问题之Bellman-ford算法
  3. php中html富文本编辑器,php + wangEditor 富文本编辑器的配置
  4. mysql扩展使用_mysql的扩展应用
  5. eclipse中护眼色设置
  6. 天天用Redis,持久化方案你又知道哪些?
  7. python包和目录有什么不同_python模块和包的区别
  8. 《spring-boot学习》-07-spring data jpa
  9. java成绩前五名的代码_一个 JAVA 程序,实现输出考试成绩的前三名
  10. java编程测试题_Java编程测试可帮助您评估求职者
  11. gcc中设置特定代码块的优化级别
  12. java 显示 装配_【spring】---spring的装配Bean方式
  13. 容器技术之Kubernetes
  14. ppt压缩文件怎么压缩?
  15. AVL Trees: Tutorial and C++ Implementation
  16. 【计算机网络】6. 网络基础4之详解IP协议( IP协议头格式、IP地址管理、路由选择)
  17. 这种性生活伤女人尿道
  18. 本周AI热点回顾:十四五规划“人工智能第一!”;深度学习漫画第一卷现已开源;英伟达GPU“屠榜”MLPerf
  19. 单片机做计算机乘法,基于单片机实现的四则运算计算器.DOC
  20. 一款10秒钟完成的校园报修系统【分享】

热门文章

  1. 一致性哈希(hash)算法
  2. Hyperledger Fabric1.4超详细环境搭建 搭建不出来本博主倒立写代码
  3. 阿里云 centos 7.6 安装和启动redis 6
  4. vue中的组件 (全局注册和本地注册组件)
  5. arduino 停止程序_Arduino用ISD1820语音录放模块制作留言机
  6. mysql 事物gljbie,提升mysql性能几大参数丶章怀柔
  7. 电脑编程教学_上村CNC电脑锣编程培训按工厂模式整套实训
  8. VScode:创建用户代码片段
  9. Cesium:向地图中添加面的方法
  10. android倒计时的正确释放,Android 计时器和handler的正确使用方式