裁剪:使用计算机处理图形信息时,计算机内部存储的图形往往较大,而屏幕显示的只是图形的一部分。因此需要确定图形哪些部分落在显示区内,哪些落在显示区外。这个选择的过程称为裁剪

1、点的裁剪

对任意点P(x,y),若满足以下不等式则P在矩形窗口内;否则,P在窗口之外

2、直线段的裁剪

直线段和裁剪窗口的可能关系:

要裁剪一条直线段,首先要判断:

1)是否完全落在裁剪窗口内

2)是否完全在窗口外

3)如果不满足以上两条,则计算它与一个或多个裁剪边界的交点

Cohen-Sutherland算法

又称为编码裁剪算法,基本思想时对每条直线段分三种情况处理:
1)若P1和P2完全在裁剪窗口内,取之
2)若P1(x1,y1)和P2(x2,y2)均在窗口外,且满足下列四个条件之一,弃之





3)若直线段既不满足“取之”条件,也不满足“弃之”条件则需要对直线段按交点进行分段,分段后判断取之还是弃之

每条线段的端点都赋以四位二进制码D3D2D1D0,编码规则如下:

若X<Xleft,则D0=1,否则D0=0

若X>Xright,则D1=1,否则D1=0

若Y<Ybottom,则D2=1,否则D2=0

若Y>Ytop,则D3=1,否则D3=0

窗口及其延长线所构成了9个区域。根据该编码规则:

D0对应窗口左边界;D1对应窗口右边界;D2对应窗口下边界;D0对应窗口上边界;

裁剪一条线段时,先求出端点P1和P2的编码code1和code2然后进行二进制“或”运算和“与”运算

1)若code1|code2=0,对直线段取之

2)若code1&code2≠0,对直线段弃之

若两个条件均不满足则需求出直线段与窗口边界的交点在交点处把直线段一分为二

Cohen-Sutherland算法用编码的方法实现了对直线段的裁剪

比较适合两种情况:一是大部分线段完全可见;二是大部分线段完全不可见

存在的问题:最坏的情况下,被裁减线段与窗口4条边计算交点,然后所得的裁剪结果却可能时全部舍弃

直线裁剪算法-Cohen-Sutherland算法相关推荐

  1. Sutherland-Hodgeman 和Cohen—Sutherland算法

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

  2. 中点分割裁剪算法 c语言,裁剪算法——中点分割算法/Liang-Barsky算法

    三.中点分割法 首先对直线段的端点进行编码. [核心思想:通过二分逼近来确定直线段与窗口的交点.] 具体方法: 1.若中点不在窗口内,则把[中点]和离窗口边界[最远点]构成的线段丢掉,以线段上的另一点 ...

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

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

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

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

  5. Cohen-Sutherland算法

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

  6. Python+OpenGL使用Cohen-Sutherland算法实现直线裁剪

    推荐教材: <Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),董付国,清华大学出版社,2020年6月第1次印刷,2021年12月第11次印刷,山东省一流 ...

  7. 计算机图形学 学习笔记(四):直线裁剪算法:Cohen-Suther land,中点分割法,Liang-Barsky

    接上文 计算机图形学 学习笔记(三):多边形的区域填充算法,反走样算法 光栅图形学算法 本文主要讲解直线裁剪算法. 裁剪 使用计算机处理图形信息时,计算机内部存储的图形往往比较大,而屏幕显示的知识图形 ...

  8. 【计算机图形学 】Cohen-Sutherland 直线裁剪算法 | OpenGL+鼠标交互

    文章目录 其他计算机图形学实验 前言 代码借鉴 步骤 1.点的结构体 2. 创建用于裁剪的窗口并绘制 3.画点函数 4. Cohen-Sutherland 直线裁剪算法部分 4.1 判断点所在位置,生 ...

  9. 计算机图形学 学习笔记(一):概述,直线扫描转换算法:DDA,中点画线算法,Bresenham算法

    前言 本笔记基于 http://www.icourse163.org/learn/CAU-45006?tid=1001746004#/learn/announce 感谢中国农大 赵明老师的分享~ 现在 ...

  10. bresenham算法_二维光栅图形的扫描:直线的DDA、Bresenham算法与圆的生成

    数值微分DDA算法 算法原理 DDA算法是一个增量算法,每一步的x.y值是用前一步的值加上一个增量来获得的,每一步在最大位移方向上加1. 优点:算法直观.易实现 缺点:有浮点数和浮点运算,效率不高 代 ...

最新文章

  1. WP7下巧用MediaElement在雪藏中
  2. 使用pt-slave-delay实现mysql的延迟备份
  3. CS231n官方笔记授权翻译总集篇发布
  4. (53)zabbix模板
  5. 2017年总结的前端文章——CSS高级技巧汇总
  6. Xftp上传文件显示状态错误
  7. Java时间日期的处理
  8. windbg 常用查看锁以及互斥量
  9. web网页上面调用qq
  10. 备忘: MIRACL 大数运算库使用手册
  11. 鞋城模板+html,西安锦绣鞋城整合营销策划方案
  12. 业务流程图绘制方法经验谈(上篇)
  13. 单个html页面面包屑,充分利用网页设计中的面包屑
  14. 唧唧DOWN闪退的原因
  15. 编译原理(7):运行存储分配
  16. BUUCTF RE WP31-32 [WUSTCTF2020]level1、[GWCTF 2019]xxor
  17. OCR技术3-大批量生成文字训练集
  18. Android APK打包流程
  19. 教授专栏12|龚亚平:走出危机困局,取决员工创造力
  20. 学机械 计算机,机械设计制造专业

热门文章

  1. 小米路由器r1d刷第三方_小米路由器R1D 改造散热记录
  2. 绕不开的一元二次方程
  3. 在 React JS 中使用 JSON 占位符的Web 简易应用程序
  4. 基于Spark实现电影点评系统用户行为分析—DataFrame篇(二)
  5. python 赋值方法大全
  6. php如何跳过qq验证,QQ申诉如何跳过好友验证?免除好友验证即可申诉成功技能详解...
  7. 零基础小白,学UI设计能找到高薪工作吗?
  8. 最全最详细的APP运营推广策划方案
  9. pat是什么意思中文_pat是什么意思
  10. 【企业架构设计实战】大数据架构最佳实践