裁剪作用:

选择显示的内容--图形在窗口内的部分被显示出来,窗口外的部分被裁剪掉

图形中每个图形基本元素都要经过裁剪,因此裁剪直接影响整个图形系统的效率。

裁剪窗口:矩形,凸多边形,任意多边形

裁剪类型:二维裁剪、三维裁剪

裁剪对象:直线段、多边形、文字等

裁剪方法:

直线的裁剪方法:Sutherland-Cohen算法 , Cyrus-Beck算法,梁友栋-Barsky算法

多边形的裁剪方法:Sutherland-Hodgman算法

三维的裁剪方法: Sutherland-Cohen算法 ,梁友栋-Barsky算法

一、Sutherland-Cohen算法

本算法又称为编码裁剪算法

Sutherland–Cohen算法分成两部分:

第一步,判定:

1) 完全在窗口内的直线段,称为完全可见的线段,如AB。保留着

2) 完全在窗口外的线段,称为完全不可见线段,如CD。抛弃掉

第二步,处理不能断定为完全可见或完全不可见的线段,如IJ、KL

*这时需要计算出直线段和窗口边界的一个交点,这个交点把直线分成两段,其中一条为完全不可见的线段,被抛弃。

*对余下部分再作第一步的判断,重复上述过程,直到直线段余下的部分可用第一步的判断得出肯定的结论为止。

1、判断完全可见/不可见的线段

为使计算机能够快速判断一条直线段与窗口属何种关系,采用如下编码方法。窗口的四条边把整个平面分成九个区域,每一个区域采用四位编码表示:

在x=xL左侧的区域,编码的第四位是1;

在x=xR右侧的区域,编码的第三位是1;

在y=yB下侧的区域,编码的第二位是1;

在y=yT上侧的区域,编码的第一位是1。

如何判断?

对要被裁剪的线段的两个端点进行区域编码。

如果其所在的区域的编码均是0000(相与),则这条线段完全可见;

如果两个编码的逻辑与不为0000,则这条线段完全不可见

2、处理不能断定为完全可见或完全不可见的线段

线段KL为例,从K点(1001)的编码分析出K在x=xL的左侧,KL必和x=xL有交点,求出其交点M,KM显然是完全不可见的,因而只要对ML从第一步开始重复上述处理步骤。

由于ML还是不能用第一步下结论,又从M的编码发现M在y=yT的上侧,因而要求ML和y=yT的交点N。

丢掉MN,对NL用第一步的方法可断定NL为完全可见,至此裁剪结束。

3、程序代码

floatxl, xr, yt, yb;

unsignedchar code(float x, floaty)

{

unsignedchar c = 0;if (x

c= c|1; //按位或

else if (x >xr)

c= c|2;if (y

c= c|4;else if (y >yt)

c= c|8;returnc;

}//给九个区域编码

void clip(float x0, float y0, float x2, floaty2)

{

unsignedcharc1, c2, c;floatx, y, wx, wy;

c1=code(x0, y0);

c2=code(x2, y2);while ((!(c1 == 0)) || (!(c2 == 0)))

{if ((c1&c2))return; //两端点逻辑与不为0,则在区域外,裁去

c =c1;if (c == 0)

c=c2;

wx=x2-x0;

wy=y2-y0;if ((c & 1) == 1)

{

y= y0 + wy * (xl - x0) /wx;

x=xl;

}//端点在xl左侧,求与xl的交点

else if ((c & 2) == 2)

{

y= y0 +wy * (xr - x0) /wx;

x=xr;

}//端点在xr右侧,求与xr的交点

else if ((c & 4) == 4)

{

x= x0 +wx * (yb - y0) /wy;

y=yb;

}//端点在yb下方,求与yb的交点

else if ((c & 8) == 8)

{

x= x0 +wx * (yt - y0) /wy;

y=yt;

}//端点在yt上方,求与yt的交点

if (c ==c1)

{

x0=x;

y0=y;

c1=code(x0, y0);

}else{

x2=x;

y2=y;

c2=code(x2, y2);

}//用交点代替端点,再返回第一步

}//While()

glLine(int(x0), int(y0), int(x2), int(y2));

}

4、小结

Cohen-Sutherland裁剪算法对不与边框相交的线段进行裁剪时效率较高,而对与窗口边界有交点的线段裁剪效率低。

因而比较适合两种情况的裁剪:一是大部分线段完全可见;二是大部分线段完全不可见。

而且很多的时候,被裁剪线段仅与窗口边界延长线相交,求交点到最后是无效的操作,因为线段可能完全被丢弃;并且被裁剪线段与窗口边界相交时交点的取得比较复杂。

比如像下图这样的裁剪,这条红色线段完全是在裁剪窗口的外部,却需要进行算法计算,最后线段完全被丢弃!

计算机图学图形裁剪,计算机图形学——裁剪相关推荐

  1. 计算机图学实验报告,计算机图形学实验报告实验1

    计算机图形学实验报告实验1 (9页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 贵州大学实验报告学院:计算机科学与信息专业:计科班级:101 ...

  2. 计算机图学概念,计算机图形学(概念).doc

    计算机图形学(概念) 1.计算机图形学(Computer Graphics) 计算机图形学是研究怎样利用计算机来产生存储和处理图形的原理.方法和技术的一门学科. IEEE定义:Computer gra ...

  3. 大学计算机课程学什么内容,计算机是学什么内容的 有哪些课程

    计算机专业所学的知识大多数是对计算机的使用,以及掌握互联网操作的工具,与该专业最为相关的几个课程内容就是计算机网络.C语言.计算机的组装和维修维护.局域网的组建等等. 计算机专业课程 计算机专业类包括 ...

  4. 济南技校计算机专业学什么,技校计算机专业学什么-邹城

    职业教育门槛低主要体现在两个方面,一是对于学 历的要求低,无论是初中生.高中生.生.大专生.无就业的人员都可以参与到职业教育中,学或者提升技能,以期能够更好地获得就业机会.二是零门槛学,学者无需理论或 ...

  5. 计算机类创新论文题目,计算机类学论文选题 计算机类论文标题怎样定

    [100道]计算机类学论文选题供您参考,希望能解决毕业生们的计算机类论文标题怎样定相关问题,选好题目那就开始写计算机类论文吧! 一.比较好写的计算机类论文题目: 1.浅谈计算机类图书的分类与主题标引 ...

  6. 计算机都学什么数学,计算机专业的数学应学到什么水平?应该学习数学的那些分支?...

    本人是数学系的, 但其实真正的爱好是计算机. 当年报志愿的时候不知听谁说了句, 学计算机, 想搞软件就去学数学, 想搞硬件就去学物理, 然后就报了数学. 在数学系, 感觉思维确实受到了训练, 但所学的 ...

  7. 计算机高新技术学什么,高新技术计算机教学利弊分析

    [摘要] 随着计算机技术的快速发展,计算机在经济社会中的应用越来越广泛.因此使用计算机的理论和实践操作的能力已成为信息时代个人能力的重要组成部分.所以,在计算机教学中融入对熟练操作计算机的能力培养就显 ...

  8. 安徽省高等计算机研究学,安徽省高等学校计算机教育研究会2021年常务理事会在我校召开...

    3月20日,安徽省高等学校计算机教育研究会2021年常务理事会在我校召开,安徽省高校计算机学院院长等共58人参加会议.我校副校长聂宗瑶及信息技术学院负责人参加会议.研究会理事长.合肥工业大学教授胡学钢 ...

  9. 少儿学计算机应该学什么,学习计算机与幼儿专业的关系

    近年来,随着计算机使用的普及化,计算机教育已成为学校课程的一部分,而且逐渐向低龄化发展.那么计算机教育是否可以从幼儿园开始实施?从小接触这一信息媒体,是否有利于他们以后的发展?我们承认,计算机在幼儿园 ...

  10. 计算机图学测试题及答,计算机图形学试卷

    1. 计算机图形学考题 一.单项选择题(本大题共10小题,每小题3分,共30分)提示:在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内.错选.多选或未选均无分 1)灰度 ...

最新文章

  1. 抽象工厂与工厂模式例子
  2. android后台截屏实现(3)--编译screencap
  3. pxc mysql mycat_Mycat+Pxc的配置
  4. C++ 虚函数,纯虚函数,抽象类整理
  5. gradle的groovy语法案例详解
  6. ubuntu ssh服务器与客户端的文件互传
  7. 【Java编程思想笔记】-集合1
  8. 数据结构笔记:二叉树的构造(根据遍历顺序构造二叉树)
  9. jQuery和CSS3炫酷滚动页面内容元素动画特效
  10. 如何成都报计算机考试,成都学院2017上半年计算机考试报名通知
  11. 1月10日云栖精选夜读:专访金榕:四年蜕变,阿里iDST是如何登上浪潮之巅的?...
  12. 08cms php5.6,大型房产门户08cms单城市商业版V8.4(带升级补丁),带手机独家放送,去除后门优化响应...
  13. json数据转换工具-js
  14. 丝滑流畅的手写签名 PC适配版
  15. linux filesystem not open,LVM 'Can’t open /dev/sdb1 exclusively. Mounted filesystem?' Problem
  16. HTTP技术快速提升网页的访问速度
  17. 三个表内连接查询创建视图
  18. 基于Java Web的房屋出租管理系统
  19. echarts实现词云图表,及参数配置详解
  20. java使用itextpdf生成PDF批量打印荣誉证书(指定位置输出文字)

热门文章

  1. 2021年安全员-A证报名考试及安全员-A证考试报名
  2. 《UML系统分析与设计》习题答案
  3. python数据分析与展示 嵩天_【学习笔记】PYTHON数据分析与展示(北理工 嵩天)
  4. JDK1.8下载 百度网盘
  5. 99定时器设计c语言,51单片机写的曝光定时器C语言程序
  6. kali安装DVWA详细教程
  7. 高中计算机会考在线模拟考试,高中信息技术会考练习试题及答案
  8. 惠普m1216硒鼓清零步骤_hpm1213nf清零
  9. 安卓智能手机完全装机手册,让安卓拥有无限可能!
  10. [转载] 信息系统项目管理师论文范例:论软件项目的进度管理