计算机图形学总结复习

2024-06-19

计算机图形学总结复习(精选6篇)

计算机图形学总结复习 第1篇

图形变换的整理和复习

(二)学案

班级 姓名 小组 等级

【学习目标】

1.我能熟练的在方格纸上画出轴对称图形的对称轴。2.我能熟练的在方格纸上补全一个简单的轴对称图形。3.我能熟练的在方格纸上按水平或垂直方向将简单图形平移。4.我能熟练的在方格纸上将简单图形旋转90度。

【学习过程】

一、自主学习

(一)知识回顾,构建知识体系

想一想:轴对称图形、平移和旋转我们学习了哪一些知识?利用思维导图构建运算律知识网络。看谁梳理的知识全面,思维导图分支清晰。

(二)复习检测

过渡语:刚才同学们自学的非常认真,做的也很好,能不能用来做题呢? 1.二、合作探究

内容:图形旋转90°的方法。学习指导:

1.按要求独立完成下列题目。

2.想一想是怎么旋转的,先在小组内交流汇报。3.组长总结旋转的方法。4.班内汇报。

三、当堂训练

1.操作题

(1)向()平移了

()格。

(2)把上面的小船图向上平移5 格

(3)画出的另一半,使它成为轴

对称图形。

2.从镜子中看到的左边图形的样子是什么?画“√” 3.接着往下画。

4.按要求画一画。(选做题)

(1)把平行四边形先向上平移3格,再向左平移6格,画出平移后的图形;

(2)将三角形围绕点o逆时针旋转90°,画出旋转后的图形;

(3)画出图形3的另一半,使它成为一个轴对称图形。

四、自我反思

一节课的学习中,你有什么收获?请认真总结一下,再一次整理你的思维导图。

计算机图形学总结复习 第2篇

——浅析计算机图形学及其作用 本学期学校开设了计算机图形学,一开始不知计算机图形学为何物的我不是很理解为什么要有这门课,但是经过一学期的洗礼过后,我对计算机图形学有了一定的理解。我知道了计算机图形学(Computer Graphics,简称CG)是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。图形通常由点、线、面、体等几何元素和灰度、色彩、线型、线宽等非几何属性组成。从处理技术上来看,图形主要分为两类,一类是基于线条信息表示的,如工程图、等高线地图、曲面的线框图等,另一类是明暗图,也就是通常所说的真实感图形。计算机图形学一个主要的目的就是要利用计算机产生令人赏心悦目的真实感图形。对于我们将来从事景观设计的人来说,为了使自己的方案获得更多人的欣赏,必须创建图形所描述的场景的几何表示,再用某种光照模型,计算在假想的光源、纹理、材质属性下的光照明效果。所以计算机图形学与另一门学科计算机辅助几何设计有着密切的关系。事实上,图形学也把可以表示几何场景的曲线曲面造型技术和实体造型技术作为其主要的研究内容。同时,真实感图形计算的结果是以数字图象的方式提供的,计算机图形学也就和图像处理有着密切的关系。

谈到图形和图像时,现如今图形与图像两个概念间的区别越来越模糊,但还是有区别的:图像纯指计算机内以位图形式存在的灰度信息,而图形含有几何属性,或者说更强调场景的几何表示,是由场景的几何模型和景物的物理属性共同组成的。

计算机图形学的研究内容非常广泛,如图形硬件、图形标准、图形交互技术、光栅图形生成算法、曲线曲面造型、实体造型、真实感图形计算与显示算法、非真实感绘制,以及科学计算可视化、计算机动画、自然景物仿真、虚拟现实等。

自1963年,伊凡·苏泽兰(Ivan Sutherland)在麻省理工学院发表了名为《画板》的博士论文,标志着计算机图形学的正式诞生起,至今已有四十多年的历史。此前的计算机主要是符号处理系统,自从有了计算机图形学,计算机可以部分地表现人的右脑功能了,所以计算机图形学的建立具有重要的意义。通过课堂上的学习以及网上的介绍,我发现近年来,计算机图形学在如下几方面有了长足的进展:

在智能CAD方面,就目前流行的大多数CAD软件来看,主要功能是支持产品的后续阶段一一工程图的绘制和输出,产品设计功能相对薄弱,利用AutoCAD 最常用的功能还是交互式绘图,如果要想进行产品设计,最基本的是要其中的AutoLisp语言编写程序,有时还要用其他高级语言协助编写,很不方便。而新一代的智能CAD 系统可以实现从概念设计到结构设计的全过程。

在计算机美术与设计方面,自1952年.美国的Ben·Larose用模拟计算机做了预示着电脑美术的开始得具有历史性意义的波型图《电子抽象画》开始,以微机和工作站为平台的个人计算机图形系统逐渐走向成熟,大批商业性美术设计软件如雨后春笋般纷纷面市; 以苹果公司的MAC 机和图形化系统软件为代表的桌面创意系统被广泛接受,CAD成为美术设计领域的重要组成部分。而计算机设计学包括三个方面:即环境设计(建筑、汽车)、视觉传达设计(包装)、产品设计。CAD对艺术的介入,分三个应用层次:(1)计算机图形作为系统设计手段的一种强化和替代; 效果是这个层次的核心(高精度、高速度、高存储)。(2)计算机图形作为新的表现形式和新的形象资源。

(3)计算机图形作为一种设计方法和观念。

同时,计算机图形学、计算机绘画、计算机音乐、计算机辅助设计、电影技术、电视技术、计算机软件和硬件技术等众多学科的最新成果都对计算机动画技术的研究和发展起着十分重要的推动作用。计算机动画的一个重要应用就是制作电影特技 可以说电影特技的发展和计算机动画的发展是相互促进的。比如广受欢迎的终结者系列中便大量运用了电脑特技,而在影片《阿凡达 》中几乎成为了电影特效的天下,电影特技的运用丰富了人们的视觉效果,是电影卖座的重要保证。我国的计算机动画技术起步较晚。1990年的第11届亚洲运动会上,首次采用了计算机三维动画技术来制作有关的电视节目片头。从那时起,计算机动画技术在国内影视制作方面得到了讯速的发展,继而以3D Studio 为代表的三维动画微机软什和以Photoshop等为代表的微机二维平面设计软件的普及,对我国计算机动画技术的应用起到了推波助谰的作用。计算机动画的应用领域十分宽广 除了用来制作影视作品外,在科学研究、视觉模拟、电子游戏、工业设计、教学训练、写真仿真、过程控制、平面绘画、建筑设计等许多方面都有重要应用。

科学计算的可视化是发达国家八十年代后期提出并发展起来的一门新兴技术,它将科学计算过程中及计算结果的数据转换为几何图形及图象信息在屏幕上显示出来并进行交互处理,成为发现和理解科学计算过程中各种现象的有力工具。它涉及到下列相互独立的几个领域:计算机图形学、图象处理、计算机视觉、计算机辅助设计及交互技术等。科学计算可视按其实现的功能来分,可以分为三个档次:(1)结果数据的后处理;(2)结果数据的实时跟踪处理及显示;(3)结果数据的实时显示及交互处理。

“虚拟现实”(Virtual Reality)一词是由美国喷气推动实验室(VPL)的创始人拉尼尔(Baron Lanier)首先提出的 在克鲁格(Algren Krueger)70年

代中早期实验里.被称为 人工现实”(Artificial reality);而在吉布森(William Gibson)l984 年出版的科幻小说Necromancer里,又被称为“可控空间”(Cyberspace)。虚拟现实是美国国家航空和航天局及军事部门为模拟而开发的一门高新技术 它利用计算机图形产生器,位置跟踪器,多功能传感器和控制器等有效地模拟实际场景和情形,从而能够使观察者产生一种真实的身临其境的感觉。虚拟环境由硬件和软件组成,硬件部分主要包括:传感器(Sensors)、印象器(Effecter)和连接侍感器与印象器产生模拟物理环境的特殊硬件。利用虚拟现实技术产生虚拟现实环境的软件需完成以下三个功能:建立作用器(Actors)以及物体的外形和动力学模型:建立物体之间以及周围环境之间接照牛顿运动定律所决定的相互作用;描述周围环境的内容特性。

在工程设计方面,计算机图形学的作用主要表现在(1)建筑设计,包括方案设计、三维造型、建筑渲染图设计、平面布景、建筑

构造设计、小区规划、日照分析、室内装潢等各类CAD应用软件。

(2)结构设计,包括有限元分析、结构平面设计、框/排架结构计算和分析、高层结构分析、地基及基础设计、钢结构设计与加工等。

(3)设备设计,包括水、电、暖各种设备及管道设计。

(4)城市规划、城市交通设计,如城市道路、高架、轻轨、地铁等市政工程设

计。

(5)市政管线设计,如自来水、污水排放、煤气、电力、暖气、通信(包括电

话、有线电视、数据通信等)各类市政管道线路设计。

(6)交通工程设计,如公路、桥梁、铁路、航空、机场、港口、码头等。

(7)水利工程设计,如大坝、水渠、河海工程等。

(8)其他工程设计和管理,如房地产开发及物业管理、工程概预算、施工过程

控制与管理、旅游景点设计与布置、智能大厦设计等。

那么如何学好计算机图形学呢? 除了计算机图形学的基础知识以外,我们还需要相关知识,懂得越多,才能学的越好。

英语,如果要学好计算机图形学的话,我认为需要阅读大量的英文书籍和资料,毕竟国外相关研究更加深入,好的英文功底有助于紧跟国际潮流。

数学,计算机图形学里面经常会遇到数学方面的知识,比如高等数学中的数值分析,微分几何,拓扑,差值概论以及微分方程等。

物理,如果要进行基于物理的建模,一些物理理论是要学习的。如力学,光学,有限元„„

编程语言,C语言或C++是计算机图形学中通用的语言。

数据结构,当需要用数据结构来描述图形形象时,除了通用的链表、树等数据结构外,图形学还有自己特殊的数据结构。

计算机图形学总结复习 第3篇

1 计算机图形图像处理的基础性内涵机理论述

所谓的计算机图形图像处理技术,就是主张利用概念和数学描述方式,进行特定物体几何数据和模型描述,在计算机系统之中加以显示、修改、储存完善。其核心内容可以细化为:

第一,几何变换,包括平移、缩放、透视和投影等工序环节。

第二,即图形数字化编码、增强、复原、分割和分析事务。

第三,则是曲线和曲面拟合。

第四,建模和造型改良设计。

第五,隐线、隐面的适当消除。

第六,明暗和贴图纹理调试。

第七,色彩包装修饰。

归结来讲,图形图像处理技术,长期渗透于计算机辅助设计CAD、制造CAM、教育CAI,以及虚拟现实等操作空间之中,并且当中CAD的应用最为广泛。

2 计算机图像学涉猎的主流工作内容研究

计算机图像学研究内容着实广泛,包括图形硬件、标准、交互式操作技术、曲线曲面建模、真实感图形显示计算方式、虚拟现实等结构单元。其核心动机,在于借助计算机系统将真实感图像灵活表达。因此,相关技术人员必须尽快搭建起图形描述场景几何表示体系,配合光照模型,进行假想光源、纹理结构、材质属性等层面的光照效果计算演练。另外,图像学还能够灵活呈现特殊几何场景曲线曲面和实体造型,全程利用数字图像模式加以支撑引导。总体来讲,计算机图像学和图像处理之间,保留着深刻的关联特性。

3 计算机图像学的主流应用领域解析

3.1 计算机辅助设计和制造活动方面

如今计算机图形学已经成功地应用到建筑室内施工、机械产品制造等领域,如动车、发电厂、模具厂的功能调试等事务,而CAD和CAM便是在现代工业界中最为常见的计算机图形操作程序。而在电子工业设计项目中,计算机图形学也成功地过渡转接到集成电路、电力线路网络分析等细务之上,当中呈现的优势地位也都有目共睹。单纯拿CAD程序为例,其主要应用在现代建筑工程图纸三维形体建模工序之中,主张透过一系列二维信息之中,进行三维信息提取、划分和综合化处理,进一步在立体空间内搭建起对应的形态架构,令当中一切点、线、面的交互式拓扑关系得以重整,最终贯彻所需形体的重建任务指标。

3.2 计算机图形处理的用户接口供应方面

维护控制一类图形化用户界面的优质性,第一要务便是集中一切技术手段进行图形操作软件易用性调节。事实上,自从Apple企业成功推广全新图形操作系统过后,尤其是在Win⁃dows各项应用辅助范畴之下,图形学知识开始全面灌输到计算机操作的各项事务之中。

3.3 地形地貌和自然资源模拟演示方面

计算机图形处理技术,能够将代表国家经济系统的一切国土基础信息搜集重整,进一步衍生出生动形态的平面、三维地形地貌演示图,确保至此过后,高层国土整治机构能够作出更加科学的预测和决策,真正为国土资源多元化开发利用,提供较为精准的指导线索。

3.4 计算机动画和其余艺术作品创作方面

随着我国计算机信息技术大力革新和推广布置,能够成功地在艺术创意领域中发挥指导作用的软件,几乎不胜枚举,包括二维平面的Photo Shop,三维动画建模和宣传调试程序3D MAX等,如今都已经在艺术创作和产业之中渗透交接,对于我民族文化推广和动画产业长期协调运营,都将产生极强的支撑辅助效用。

4 计算机图形、图像操作应用技术的诸多差异和关联细节探讨

首先,数据来源渠道不同。图像数据大多数情况下源自于客观世界,而图形处理数据则倾向于主观世界。

其次,处理工艺形式不同。图像处理工艺可细化为几何结构修正、图像形式变换、图像分割、图像内涵解析、图像类型识别等。相比之下,图形调试手段则包含几何变换、开窗裁剪、隐藏面消除、明暗纹理加工等。

最后,理论基础和应用价值不同。图像处理技术全程配合高端数字信号、模糊数学理论等,进行遥感、医学、军事等领域图像综合化调试。而计算机图形处理则深度联合样条、计算几何和分形理论,进行CAD计算机模拟调试和动画艺术作品创作。

而在诸多计算机图形、图像应用环节之中,两类操作技术交互式关联特性便不断呈现,如若技术人员能够及时结合外国先进操作理念和自身实践经验,进行图形、图像诸多控制优势融合,便能够在较短时间范围内令设计成品视觉效果和质量等,趋近完善形态。事实上,经过图形图形技术综合化发展步伐的逐渐加快,关于两类工艺技术交互式渗透环节中的界限也变得模糊起来。至于两者之间的联系和转换流程则具体如下图所示:

由上图观察验证得知,图形学的逆向运作过程,主要是进行输入图像三维数据模型提取,包括机器视觉和写体识别等。至于模型变换,则主张联合计算机辅助几何设计软件,进行各类几何形体数学模型灵活便利地创建,顺势提升内部算法自动化运作效率,辅助技术人员全面研究认证曲线、曲面的表示、生成、拼接拟合手法,最终在计算机系统之内更好地存储和管理特定模型结构。

5 结语

综上所述,计算机图形和图像处理技术如今已经得到全面革新发展,并且逐渐渗透到人民学习、工作、生活,以及企业产业领域之中。相关技术人员有必要不断提升相关软件程序熟练操作技能,尽量将各类数据内容灵活存储和改造沿用,相信长此以往,必将为我国计算机图形图像学和社会主义经济建设事业系统化发展,提供较为稳固的过渡支撑桥梁。

摘要:随着我国计算机信息技术的不断革新延展,涉及图形图像处理技术开始引起社会各界广泛关注。在此类背景影响下,笔者决定针对计算机图形学主流研究方向、发展背景、系统机理结构、日后应用领域等内容,加以细致化验证解析。希望经过上述图形学、图形处理技术内容的重新诠释过后,能够更好地调整相关技术操作人员专业技能和职业道德素质,为今后我国图形图形处理工艺可持续发展,奠定基础。

关键词:计算机,图形图像,处理技术,革新改造

参考文献

[1]柳海兰.浅谈计算机图形学的发展及应用[J].电脑知识与技术,2010,35(33):166-171.

[2]田亮.浅析计算机图形学的应用及其发展[J].民营科技,2011,13(12):120-166.

对计算机图形学的教学探讨 第4篇

关键词:计算机图形学;教学方法;算法;实践

一、认真组织课堂教学内容

计算机图形学这门功课,没有学习积极性和主动性是很难学好的。难学是学习积极性的主要障碍。因此在教学内容上,应注意以下两點:

1.充分注意学生的接受程度,教学内容要“精”。首先是注重基础,强调基本概念、基本原理,以如何“逼真”地模拟现实世界的物体为主线。其次也要突出重点,对一些要求掌握的算法要仔细分析,强调其基本思想、基本原理。只要算法的基本思想掌握了,算法的实现就容易理解,对相关算法就可举一反三、触类旁通。在教学内容上,也应注意“新”。教学内容的选取应跟上学科发展的步伐,介绍一些当前的研究热点及重要文献,使学生了解学科发展情况,也同时增加课堂教学的趣味性。

2.在教学内容上,还应注意理论与实用软件之间的关系。应介绍计算机图形学的理论、算法在流行的图形设计和动画制作软件(如AutoCAD、3DMAX等)中的应用,促进理论学习和实用软件使用形成互动。如:流行软件中对图形变换、裁剪、消隐等的操作与使用,有助于对图形变换理论、裁减算法、消隐算法等理论知识的学习。

二、注重教学方法和手段

在教学方法上,注意启发性。如在讲画线算法前,应思考:为什么在屏幕上画出直线段时,经常出现锯齿,如何解决,等等。这些问题可以引导学生预习和自学,减轻课堂负担,使课堂教学的目标清晰,任务简化。

强调对比学习方法,对解决同一问题的不同方法进行比较,如Bezier、B样条、NURBS曲线曲面间的比较,CSG树、边界表示法、八叉树表示等实体造型技术间的比较等。

在教学手段上,采用多媒体教学与传统的教学方式相结合,充分发挥图形图示、动画演示的作用,“一幅画胜过千言万语”。我们在教学中制作了多媒体教学课件,而且设计了典型算法(如Bezier曲线、B样条曲线、光线跟踪算法等)演示系统,这些工作对于提高学生学习兴趣、增强原理、算法的理解性具有很大的作用。

三、恰当设计课前、课后习题

习题应与课堂教学、上机实验等环节的工作结合起来。习题可分为课后习题和课前思考题。课前思考题具有一定的引导作用,帮助学生预习和自学,减轻课堂负担,使课堂教学的目标清晰,任务简化。课后习题是对课堂教学内容的消化、吸收、补充、完善和提高。

习题一定要精心设计和选择,特别要避免作业形式单一、难度较大,否则就会使学生产生畏难情绪。注意循序渐进、难易适度。注重基础,注意多层次(如基础知识、算法设计和综合应用题等)、多形式(如判断题、选择题、填空题、简答题、算法设计题、综合应用题等),使学生得到全面的训练。

四、充分重视实验教学

计算机图形学课程具有很强的实践性,上机实验是其重要环节。实验类型分为两部分:一是编程能力的训练,另一个是流行软件的使用。这两方面应有机地结合起来,相互促进,以有利于图形学理论和算法的掌握。学会一种或几种流行的图形设计和动画制作软件(如AutoCAD、3DMAX等)的使用,分析计算机图形学在这些软件中的具体应用,如图层、交互技术(如橡皮筋技术、引力场技术等)等,对学习计算机图形学的理论和学习这些软件本身都是非常有益的。

编程环境可以选择Visual C++/Visual Basic,由学生自己确定。实际上,Visual Basic相对简单易学,而且功能强大,也适合作为计算机图形学实验的编程工具。注意加强实验过程的管理:实验前认真准备,实验过程中认真完成,实验课后认真总结。根据实验过程及实验报告评定每次实验成绩。为确保实验教学的质量,上机实验既要有趣味性,又要有挑战性。

五、课程设计必不可少

课程设计是计算机图形学实践教学的另一个重要环节,是对学生计算机图形学课程以及相关知识的综合测试,课程设计在课程教学的中后期完成。课程设计的题目、要求在该课程的中期给出,题目也可自拟。课程设计任务不宜过难,最好在实验课的基础上进行,可以是实验的综合、改进、完善等。要求在规定的期限内完成所有的文档资料(包括源程序清单、可执行程序等),并评定课程设计成绩,作为课程总成绩的重要组成部分。

六、严格教学的过程化管理与考核

重视教学的过程化管理与考核是保证教学质量的重要手段。对课堂、作业、实验等环节进行有效的管理,及时发现和纠正每一环节中存在的问题。过程化考核体现在评定学生的课程成绩时,全面考核各重要教学环节,如上课、作业、实验、课程设计、期末考试等的学习情况。教师应充分重视学生平时的学习情况,鼓励他们在平时作业、实验、课程设计中独立思考,并有所创新。每次作业、实验都要给出等级,各环节的学习情况都要逐一评定成绩,并按比例记入到课程的总成绩中。

参考文献:

[1]孙家广,扬长贵.计算机图形学[M].北京:清华大学出版社,1996.

计算机图形学实验报告 第5篇

一、实验目的

1、掌握有序边表算法填充多边形区域;

2、理解多边形填充算法的意义;

3、增强C语言编程能力。

二、算法原理介绍

根据多边形内部点的连续性知:一条扫描线与多边形的交点中,入点和出点之间所有点都是多边形的内部点。所以,对所有的扫描线填充入点到出点之间所有的点就可填充多边形。

判断扫描线上的点是否在多边形之内,对于一条扫描线,多边形的扫描转换过程可以分为四个步骤:

(1)求交:计算扫描线与多边形各边的交点;(2)排序:把所有交点按x值递增顺序排序;

(3)配对:第一个与第二个,第三个与第四个等等;每对交点代表扫描线与多边 形的一个相交区间;(4)着色:把相交区间内的象素置成多边形颜色,把相交区间外的象素置成背景色。

p1,p3,p4,p5属于局部极值点,要把他们两次存入交点表中。如扫描线y=7上的交点中,有交点(2,7,13),按常规方法填充不正确,而要把顶点(7,7)两次存入交点表中(2,7,7,13)。p2,p6为非极值点,则不用如上处理。

为了提高效率,在处理一条扫描线时,仅对与它相交的多边形的边进行求交运算。把与当前扫描线相交的边称为活性边,并把它们按与扫描线交点x坐标递增的顺序存放在一个链表中,称此链表为活性边表(AET)。

对每一条扫描线都建立一个与它相交的多边形的活性边表(AET)。每个AET的一个节点代表一条活性边,它包含三项内容

1.x-当前扫描线与这条边交点的x坐标;

2.Δx-该边与当前扫描线交点到下一条扫描线交点的x增量; 3.ymax-该边最高顶点相交的扫描线号。

每条扫描线的活性边表中的活性边节点按照各活性边与扫描线交点的x值递增排序连接在一起。

当扫描线y移动到下一条扫描线y = y+1时,活性边表需要更新,即删去不与新扫

描线相交的多边形边,同时增加与新扫描线相交的多边形边,并根据增量法重新计算扫描线与各边的交点x。

当多边形新边表ET构成后,按下列步骤进行:

① 对每一条扫描线i,初始化ET表的表头指针ET[i]; ② 将ymax = i的边放入ET[i]中;

③ 使y =多边形最低的扫描线号; ④ 初始化活性边表AET为空; ⑤ 循环,直到AET和ET为空。

 将新边表ET中对应y值的新边节点插入到AET表。 遍历AET表,将两两配对的交点之间填充给定颜色值。

 遍历AET表,将 ymax= y的边节点从AET表中删除,并将ymax> y的各边节点的x值递增Δx;并重新排序。 y增加1。

三、程序源代码

#include “graphics.h” #define WINDOW_HEIGHT 480 #define NULL 0 #include “alloc.h” #include “stdio.h” #include “dos.h” #include “conio.h” typedef struct tEdge /*typedef是将结构定义成数据类型*/ { int ymax;/* 边所交的最高扫描线号 */ float x;/*当前扫描线与边的交点的x值 */ float dx;/*从当前扫描线到下一条扫描线之间的x增量*/ struct tEdge *next;}Edge;

typedef struct point{int x,y;}POINT;/*将结点插入边表的主体函数*/

void InsertEdge(Edge *list,Edge *edge)/*活性边edge插入活性边表list中*/ { Edge *p,*q=list;p=q->next;/*记住q原来所指之结点*/ while(p!=NULL)/*按x值非递减顺序增加边表*/ {

if(edge->x

x)/*要插入的边的x较大不应该在当前插入*/

p=NULL;

else /*要插入的边的x较小应该在当前插入*/

{q=p;

p=p->next;

} } edge->next=q->next;/*使欲插入之结点edge指向q原来所指之结点*/ q->next=edge;/*使q指向插入之结点*/ }

int yNext(int k,int cnt,POINT *pts)/*对于多边形中的某个顶点序号k(0,1...6),返回下一顶点的纵坐标,如果这2个顶点所在边是 水平的,则顺延,即返回第(k+2)个顶点的纵坐标),cnt是顶点个数+1,pts指向多边形顶点结构体的指针*/

{ int j;if((k+1)>(cnt-1))/*当前顶点为最后一个顶点,则下一个顶点为第0个顶点 */

j=0;else

j=k+1;/*当前顶点不是最后一个顶点,下一个顶点为数组下标加一*/ while(pts[k].y==pts[j].y)/*扫描线扫过平行顶点,需分情况找到当前顶点下下个顶点*/ if((j+1)>(cnt-1))

j=0;

else

j++;return(pts[j].y);/*返回下一个顶点的y值 */ }

/* 计算增量,修改AET*/ /*生成边表结点,并插入到边表中的主体函数*/ void MakeEdgeRec(POINT lower,POINT upper,int yComp,Edge *edge,Edge *edges[])/*把边结点edge,放到lower.y扫描线所在的边结点指针数组edges[]中 */ {edge->dx=(float)(upper.x-lower.x)/(upper.y-lower.y);edge->x=lower.x;if(upper.yymax=upper.y-1;/*缩短上层顶点*/ /*奇点,应该把这点当作两个点而分开,所以把y的最大值减一,向下移动*/ else edge->ymax=upper.y;/*不是奇点,不需改变y值 */ insertEdge(edges[lower.y],edge);/*插入一个边缘扫描线,插入到列表 */ }

/*创建边表的主体函数*/ void BuildEdgeList(int cnt,POINT *pts,Edge *edges[])/*建立新边表,cnt:多边形顶点个数+1,edges[]:指向活性边结点的指针数组*/ { Edge *edge;POINT v1,v2;int i,yPrev=pts[cnt-2].y;/*当前顶点的前一个顶点的y值,在当前顶点不是奇点时使用该参数*/ v1.x=pts[cnt-1].x;v1.y=pts[cnt-1].y;for(i=0;i

edge=(Edge *)malloc(sizeof(Edge));

edge=(Edge*)malloc(sizeof(Edge));if(v1.y

yNext*/ MakeEdgeRec(v1,v2,yNext(i,cnt,pts),edge,edges);/*确定v1,v2边较高端点的开闭*/

else

MakeEdgeRec(v2,v1,yPrev,edge,edges);/*当前顶点

是奇点*/ } yPrev=v1.y;v1=v2;} }

/*建立活性边表的主体函数:建立第scan条扫描线的活性边表*/ void BuildActiveList(int scan,Edge *active,Edge *edges[])/*建立扫描线scan的活性边表,把活性边结点放入扫描线scan的结点指针数组 edges[scan]中*/ { Edge *p,*q;p=edges[scan]->next;/*查找当前扫描线对应的y桶*/ while(p)/*y桶不空*/

{q=p->next;/*找到最后一个边结点,插入*/

InsertEdge(active,p);/*把更新后的边表重新插入边表中保存*/

p=q;

} }

/*填充一对交点的主体函数*/ void FillScan(int scan,Edge *active,int color)/*填充扫描线:填充扫描线上,且在下一结点到再下一结点之间的点*/ { Edge *p1,*p2;int i;p1=active->next;while(p1){

p2=p1->next;

for(i=p1->x;i

x;i++)

putpixel((int)i,scan,color);/*画出图形内部的点*/ p1=p2->next;/*活性表的下一条边表 */ } }

void DeleteAfter(Edge *q)/*删除链表中结点,删除边结点q的后续结点p*/ { Edge *p=q->next;q->next=p->next;/*删除结点*/ free(p);} /* 删除 y=ymax 的边 */

/*填充完后,更新活动边表的主体函数*/ void UpdateActiveList(int scan,Edge *active)/*删除扫描线scan完成交点计算的活性边,同时更新交点x域*/ { Edge *q=active,*p=active->next;while(p)if(scan>=p->ymax)/*扫描线超过边的最大y值,此条边的节点应该删掉*/ { p=p->next;deleteAfter(q);} else /*扫描线未超过边的最大y值,相应的x值增加*/ { p->x=p->x+p->dx;q=p;p=p->next;} }

/*对活性边表结点重新排序的主体函数*/ void ResortActiveList(Edge *active)/*活性边表active中的结点按x域从小到大重新排序*/ { Edge *q,*p=active->next;active->next=NULL;while(p){q=p->next;InsertEdge(active,p);/*把更新后的边表重新插入边表中保存 */ p=q;} }

/*多边形填充的主体程序*/ void ScanFill(int cnt,POINT *pts,int color)/*填充函数,输入:多边形顶点个数+1=cnt, 指向多边形顶点的指针数组pts*/

{ Edge *edges[WINDOW_HEIGHT],*active;int i,scan,scanmax=0,scanmin=WINDOW_HEIGHT;for(i=0;i

{if(scanmax

if(scanmin>pts[i].y)scanmin=pts[i].y;

} for(scan=scanmin;scan<=scanmax;scan++)/*初始化每条扫面线的边链表*/ {edges[scan]=(Edge *)malloc(sizeof(Edge));/*建

edges[scan]->next=NULL;

} BuildEdgeList(cnt,pts,edges);/*建立有序边表*/ active=(Edge *)malloc(sizeof(Edge));“桶”*/ active->next=NULL;for(scan=scanmin;scan<=scanmax;scan++)/*扫描每条扫描线,求活性表*/ {

BuildActiveList(scan,active,edges);/*建立活性边表*/

if(active->next)/*活性边表不为空*/

{ FillScan(scan,active,color);/*填充当前扫描线*/ UpdateActiveList(scan,active);/*更新活化边表*/ ResortActiveList(active);/*重排活化边表*/

} } }

/*开始菜单*/ void main(){ POINT pts[7];/*保存数组*/ int gdrive=DETECT,gmode;pts[0].x=100;pts[0].y=40;/*多边形顶点x、y坐标*/ pts[1].x=220;pts[1].y=140;pts[2].x=280;pts[2].y=80;pts[3].x=350;pts[3].y=300;pts[4].x=200;pts[4].y=380;pts[5].x=50;pts[5].y=280;pts[6].x=100;pts[6].y=40;/*合并桶中的新边,按次序插入到 AET 中*/ initgraph(&gdrive,&gmode,“C:TC3.0BGI”);/*设置graphic模式*/ ScanFill(7,pts,2);getch();}

四、实验结果

图1 用有序边表算法生成的多边形

五、总结与体会

实验步骤

1)分析多边形区域扫描线填充算法的原理,确定算法流程

① 初始化:构造边表,AET表置空

② 将第一个不空的ET表中的边插入AET表

③ 由AET表取出交点进行配对(奇偶)获得填充区间,依次对这些填充区间着色

④ y=yi+1时,根据x=xi+1/k修改AET表所有结点中交点的x坐标。同时如果相 应的ET表不空,则将其中的结点插入AET表,形成新的AET表 ⑤ AET表不空,则转(3),否则结束。2)编程实现

① 首先确定多边形顶点和ET/AET表中结点的结构

② 编写链表相关操作(如链表结点插入、删除和排序等)

③ 根据1)中的算法结合上述已有的链表操作函数实现多边形区域扫描线填充的主体功能

④ 编写主函数,测试该算法 通过运用C语言环境下的图像显示设置,本次实验我学会了多边形区域扫描线填充的有序边表算法,设计相关的数据结构(如链表结构、结点结构等),并将实现的算法应用于任意多边形的填充,为深一步的学习做好了铺垫。

六、参考文献

对于计算机图形学感想 第6篇

1045532136 朱啸林

我们班是计算机科学与技术,刚开始知道要上图形学的时候我还是一头雾水,觉得没什么联系,经过老师的点拨和自己的领悟,我明白了其中的道理。计算机图形学是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。通俗的说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。图形通常由点、线、面、体等几何元素和灰度、色彩、线型、线宽等非几何属性组成。从处理技术上来看,图形主要分为两类,一类是基于线条信息表示的,如工程图、等高线地图、曲面的线框图等,另一类是明暗图,也就是通常所说的真实感图形。

计算机图形学的研究内容非常广泛,如图形硬件、图形标准、图形交互技术、光栅图形生成算法、曲线曲面造型、实体造型、真实感图形计算与显示算法、非真实感绘制,以及科学计算可视化、计算机动画、自然景物仿真、虚拟现实等。自1963年计算机图形学的正式诞生起,至今已有四十多年的历史。此前的计算机主要是符号处理系统,自从有了计算机图形学,计算机可以部分地表现人的右脑功能了,所以计算机图形学的建立具有重要的意义。通过课堂上的学习以及网上的介绍,我发现近年来,计算机图形学在如下几方面有了长足的进展。可别小看了图形学,想要学好它还必须学好英语,数学,物理等多方面的知识。当然,编程语言,数据结构也是不可或缺的基础!所以,在学过了上述的课程后,学校安排了图形学这门课程。

上一篇:塔机金属结构之起重臂是什么?下一篇:搅拌站生产实习报告