计算机图形学实习报告.docx
- 文档编号:29408466
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:24
- 大小:607.21KB
计算机图形学实习报告.docx
《计算机图形学实习报告.docx》由会员分享,可在线阅读,更多相关《计算机图形学实习报告.docx(24页珍藏版)》请在冰豆网上搜索。
计算机图形学实习报告
实习报告
实习名称:
计算机图形学实习
班级:
学号:
姓名:
实习地点:
实习指导教师:
实习时间:
年月日至月日
一、实习目的与意义
本次计算机图形学的实习分两部分,一部分就是利用AutoCAD进行二维与三维模型的制作,另一部分就是利用VC6、0进行编程实现对图形的简单操作。
通过对AutoCAD的实习,熟悉该软件的基本功能及操作特点,掌握二维及三维图形的基本制作过程。
通过对VC6、0的编程实习,理解图形的生成、图形的变换、图形的显示以及二维裁剪的基本思想,熟练掌握计算机图形学的基本原理与方法;熟练掌握计算机图形学算法的实现算法;学习与掌握图形系统的设计;学习用VC++编写计算机图形学程序;建立面向对象编程的基本概念。
二、实习主要内容
1、AutoCAD软件操作
(1)简单图形绘制
(2)图形的基本编辑命令操作
(3)标注文字及填充
(4)三维图形绘制
2、基于VC6、0下的计算机图形学程序编写
(1)图形的生成:
画直线、画圆、画曲线、画字符
(2)图形的变换:
平移、旋转、缩放、对称变换
(3)图形的显示:
扫描线填充、边缘填充、种子填充
(4)图形的二维裁剪:
CS裁剪、多边形裁剪、梁友栋裁剪、圆裁剪、中点分割法
三、实习的主要过程
第一部分AutoCAD软件操作
AutoCAD软件可以处理很多问题,在机械制图,土木建筑等方面有着广泛的应用,我们在机房打开AutoCAD软件对其进行系统配置,然后进行具体操作。
通过配置可以实现工具栏之类的快捷运用。
(1)简单图形绘制
实习开始的第一天,在老师的讲解以及演示下,我们了解了AutoCAD软件的基本使用方法,与此同时,我们跟着老师的操作也逐渐熟悉了该软件的一些基本操作方法。
从设置基本绘图环境开始,按照指导书上的指示,采用边完成简单图形边学习各种命令的方式,逐渐熟练掌握了AutoCAD的使用,熟练掌握了其基本绘图功能,如掌握了绘图命令POINT、LINE、CIRCLE、ARC、DONUT、RECTANGLE、POLYLINE的功能及操作;掌握了实体绘图命令键盘输入的方法;掌握了缩放命令(ZOOM)的使用方法等。
由于指导书的例子有详尽的操作过程,所以对以上功能的使用方法的掌握比较快。
通过完成例子掌握了她们的使用方法,接着完成其她的练习达到了巩固的目的。
以下通过一些例子来说明对以上绘图功能的使用:
例一:
基本环境设置
a:
在命令中输入limits,确定相应的绘
图区域大小
b:
在命令中输入zoom,选择A(全部),
让画布全部充满屏幕。
c:
下来进行基本的画图操作,比如line、pline、point、circle、polygon等,掌握了这些基本的画图操作。
例二:
通过pline直接实现对轮廓的绘制,circle实现对圆的绘制,绘制前仍需设置图幅大小。
对于轴对称的图形我们可以只绘出图形的一半,然后通过mirror镜像操作实现。
再绘制的过程中,我们可以采用相对坐标与极坐标来实现简单定位,避免了计算的麻烦。
绘制以上的图形时,可以采用pline绘制出外围轮廓,然后再绘制两个圆的方法,也可以采用镜像的方法来实现,从而节省时间。
例三:
绘制五角星时采用采用端点捕捉画线的方法,采用solid填充区域。
例四:
通过辅助线实现图形的简单绘制。
通过以下的图形操作巩固并熟练了图形的简单绘制的方法。
(2)图形的基本编辑命令操作
我们在绘制复杂图形的时候需要采用一些基本编辑命令操作,如复制、对称、旋转、剪切、圆的公切线、公切圆等操作,能过快速的绘制出图形。
对于复杂的图形,还需要我们能敏锐的发现图形各部分间的相关关系,才能快速而准确的绘制出图形,这就要求我们要多练习,熟练掌握基本操作,才能快速绘制比较复杂的图形。
在图形的编辑栏中有删除、复制、镜像(MIRROR)、偏移、阵列、旋转、修剪等操作,我们可以通过这些操作,来绘制复杂图形。
例一:
镜像操作、倒角处理
绘制以上图形时,先用pline绘制出上半部分的轮廓线,接着对左右两端进行倒角处理,并补竖线,然后通过mirror镜像操作绘制另一半图形。
最后绘制腰圆图形,通过复制,偏移等操作绘制出上图。
例二:
通过circle操作,画出两个圆的公切圆,通过trim修剪得到以下图形
例三:
绘制以上图形时,需要先对图形进行研究,分析图上标注的含义,确定辅助线的位置,恢复被裁剪掉的图形方便绘制图形。
通过这幅图的练习,让我们明白绘制一些复杂图形时,往往无法直接绘制出来,需要我们通过研究图形找到辅助线才能快速又准确的绘制出图形。
通过以下的图形绘制更加熟练的学会了构造辅助线,通过图形基本编辑命令操作来实现复杂图形的绘制。
(3)标注文字及填充
标注能够帮助我们检验所画图形就是否符合标准,所以绘制后的图形还需要进行标注,在标注时,要建立不同的图层,在进行标注时,要根据实际不同的情况建立不同的标注样式,进行图形的标注。
以上的图形都进行了标注。
图形填充例子:
以下两个图形综合了前面的知识,同时加入了图形的填充,图形的绘制过程比较复杂,且需要借助相应的辅助线进行绘图。
以下两个手柄图就是对前面所学知识的汇总,需要熟练掌握基本图形绘制方法、编辑命令操作与辅助线的构建。
(4)三维图形绘制
由于实习期间有较多科目的考试,三维图形的练习在CAD考核之前并没有做过,只就是在考核的时候进行了三维图形的绘制,由于没有经过三维图形练习,对三维图形的绘制不熟悉,没能在规定时间内完成三维图形的绘制。
在进行编程实习期间,才将三维图形的绘制给补了回来。
第二部分基于VC6、0下的计算机图形学程序编写
本次的编程实习采用面向对象编程,通过MFC来编程,实现可视化操作。
1、创建工程后,对菜单栏进行修改,用鼠标右键点击菜单中的空格,在出现的下拉菜单中点击最后一项“属性”,出现“MenuItemProperties”窗口;在窗口中“标题”栏输入“图形生成”,建立主菜单项“图形生成”,同理建立“图形变换”,“图形显示”“二维裁剪”的菜单项,并在其下拉选项中添加相应操作。
修改后的菜单如下图所示:
2、鼠标坐标显示
为了精确定点,必须知道当前坐标,因此必须为操作者提示鼠标坐标。
准备将坐标显示在应用程序窗口的右下脚。
在自动生成的工程中,窗口的右下脚处原就是用来显示键盘按键信息的(如下左图所示),现改为显示鼠标坐标(如下右图所示)。
3.画直线、圆、曲线、字符、颜色设置
(1)直线:
分为DDA直线、中点直线
下面以DDA直线为例,说明如何创建菜单响应函数。
已经创建了DDA直线菜单,菜单响应程序如下步骤:
打开工程项目,依次点击菜单“查瞧”、“建立类向导”,出现如下窗口(如下图),也可以用Ctrl+W打开类向导。
在ClassName:
栏中选CMy2View(即菜单响应程序放在视图类中);在ObjectIds:
栏中选ID_DRAW_DDALINE;在Messages:
栏中选COMMAND;点击AddFunction按键,出现函数命名窗口,点击该窗口中的OK按键,该函数在2View、cpp中生成。
点击该窗口中的EditCode按键查瞧、编辑该函数。
具体实现:
DDA直线的程序实现如下:
首先编写菜单响应函数,对MenuID与PressNum两个变量赋初值;接下来建立相应的鼠标响应程序框架,DDA直线要求第一次点鼠标左键确定起始点,第二次点鼠标左键确定直线终止点,并画出直线,中间利用橡皮筋技术实时显示直线的形状,完成直线绘画后,还要将橡皮筋旧线擦除。
中点画线算法实现过程与DDA算法大致相同,但就是其思想更加合理,更有利于硬件实现,提高了算法效率,程序实现同DDA大同小异,只就是DOC、cpp中核心算法不同而已,中点画线法采用交点与中点差比较得判定。
其算法的中心思想相同,即在坐标系的网格中,确定起始点后,再根据其不同的判断方法,取得离直线最近的像素点予以着色,用离散的点表示出所要直线。
上图中红线为DDA直线,黑线为中点直线
(2)曲线:
曲线分为Brezier曲线、B样条曲线与Hermite曲线。
均就是由鼠标左键确定主要拐点,按右键确定选点已完成并进行曲线绘制,双击左键消除十字丝完成曲线绘制。
Bezier曲线就是由一群控制点决定的。
一段曲线的次数与控制点的点数密切相关,人们常常使用三次曲线,那么一段曲线的控制点的点数为 4。
实际应用中,一条Bezier曲线就是由多段Bezier曲线首尾相连而成。
与之相应,一群控制点划分成多组控制点,每一组控制一段曲线的形状。
为了使每一段曲线平滑地连接起来,要求前一组最后一个控制点与后一组第一个控制点相同(即共用一个点),同时要求前一组倒数第二个控制点、最后一个控制点(即后一组第一个控制点)、后一组第二个控制点等三个控制点在一条直线上。
如果要求给出的控制点在相邻的组之间都能满足这种要求,那么控制点的布点工作将受到极大的限制。
这种要求不仅难以满足,而且灵活性被极大地削弱。
解决的办法就是计算得出连接点,即 用前一组的倒数第二点与后一组的第二点连线的中点作为相邻两段曲线控制点的终点与起点。
Bezier曲线的操作这样安排:
用鼠标左键进行控制点选点,右键结束选控制点,显示一条Bezier曲线;再按左键选取一个控制点进行移动修改,右键结束一个控制点修改;当所有的修改完成以后,双击左键生成一条正式的Bezier曲线。
因此首次布点与修改控制点位置,对鼠标的操作要求不同,必须区分开。
B样条曲线与Hemite曲线的操作安排与Bezier曲线的操作安排一致,只就是DOC、cpp中的核心算法不同而已。
上图中,黑色为Bezier曲线,红色为B样条曲线,绿色为Hemite曲线
(3)圆:
圆分为Bresenham圆、正负法圆。
Bresenham圆的程序实现如下:
由鼠标左键确定圆心,再定一点,使其与第一点的连线长度成为半径进行圆的绘制。
先为Bresenham 圆添加菜单响应函数确定MenuID,然后画圆的OnLButtonDown()响应:
用鼠标确定圆心,再移动鼠标确定半径。
在确定半径时,随着鼠标的移动,一个圆随着鼠标的移动半径发生变化。
然后调用Bresanham 算法完成圆的绘制。
Bresenham圆的编程实现如下:
首先编写菜单响应函数,对MenuID与PressNum两个变量赋初值;接下来建立相应的鼠标响应程序框架,Bresenham圆要求第一次点鼠标左键确定圆心,第二次点鼠标左键确定圆上一点,并由此确定半径,画出完整的圆;然后再在Doc、h头文件中声明必要变量与函数,并在Doc、cpp中完成Bresenham圆的生成数。
正负画圆法的编程实现与Bresenham圆的相类似。
上图中红色为Bresenham圆,绿色为正负法画圆法
(4)字符:
字符的表示有点阵表示与矢量表示两种。
点阵表示指每个字符都有若干个点表示,矢量表示记录的就是笔画信息。
可先通过调用MFC对话框对字的字体、粗细、大小进行调整,再点击文本,输入文本位置的其实坐标以及文本内容,相应文本内容则可出现在指定位置。
(5)颜色设置:
使用了MFC中的CcolorDialog类,该类就是MS设计的专门用于颜色选择的对话框类:
classCcolorDialog:
publicCCommonDialog。
4、图形显示:
扫描线填充算法、边缘填充、种子填充
扫描线填充算法运用了复杂的数据结构,且在填充过程中需要反复排序,编程难度较大。
VC类库中的函数CDC:
:
Polygon()实现了扫描线填充算法功能。
实际上我们所学的计算机图形学所有算法都能通过引用VC类库提供的函数(或函数组合)加以实现。
边缘填充实质就是以边缘与扫描线的交点为起点以“异或”的方式向右边最远点画点。
如果一个像素经过偶数次异或画点,将还原为背景颜色;而经过奇数次异或画点的像素将显示画点颜色与背景颜色经过异或运算混合的颜色。
所有的边缘都处理完后,多边形内部像素肯定经过了奇数次异或画点,因而显示画点颜色与背景颜色异或运算混合颜色;多边形外部像素肯定经过了偶数次异或画点,因而还原为背景颜色。
种子填充的原理就是从堆栈中取出一粒表示区域内部的种子,从种子点出发,沿扫描线分别向左向右边填充边寻找边界点;通过左右两边的边界点确定扫描线上的填充区域范围;根据该范围在上下相邻的两条扫描线上寻找新的未填充区域,每个区域中选一粒种子压入堆栈。
这就是一个最基本的填充步骤,整个区域的填充过程就就是这个步骤的反复循环使用。
三种算法中,种子填充算法的填充效果时间耗费多,有些象素会入栈多次,降低算法效率;栈结构占空间。
递归执行,算法简单,但效率不高,区域内每一象素都引起一次递归,进出栈,费时费内存。
边缘填充算法程序与数据结构都很简单,对于复杂图形,每一象素可能被访问多次,但由于涉及到对帧缓冲器中大量元素的多次赋值,影响了算法的效率。
扫描线算法效率高,但数据结构复杂,编程难度大,填充的过程中需要反复排序,对各种表的维持与排序开销太大,适合软件实现而不适合硬件实现。
上图中,黑色为扫描线填充,红色为边缘填充,绿色为种子填充
5、图形裁剪
图形裁剪包括Cohen-Sutherland算法、中点分割算法、梁友栋算法、多边形裁剪与圆裁剪。
(1)Cohen-Sutherland算法将窗口平面划分成九个区域,每个区域给予不同的编码。
根据线段端点落入不同的区域,给予线段端点不同的编码。
基于线段端点编码,算法给出了一整套裁剪的方法。
在裁剪过程中,窗口的参数需要多次使用,线段端点需要多次编码,编码的计算需要多次与某些常数相“与”。
为了方便,将窗口参数与几个常数定义为几个常数符号,将端点编码用一个函数实现。
为了将精力集中在裁剪的实现上,事先规定一个窗口。
操作时, 任意输入直线段,用该窗口对直线段进行裁剪。
(2)多边形裁剪不同于直线裁剪,就是用窗口对一个多边形进行裁剪,其结果还就是一个多边形。
多边形常用一个记录顶点的数组表示,最终的裁剪结果仍存放在数组中。
本节采用Sutherland-Hodgman算法对多边形进行裁剪,该算法依次使用窗口四条边对多边形进行裁剪。
四条边的裁剪原理相同,但参数略有不同,它们就是编程实现的重点。
为了使程序结构合理、易读,将边的裁剪部分用一个函数实现。
(3)圆裁剪与直线裁剪与多边形裁剪都不一样,直线裁剪完还就是直线,多边形裁剪完还就是多边形,而圆裁剪完便有可能不再就是圆,所以我们需要修改圆的生成算法,让其能够自主判断就是否在矩形框内,若就是,则绘出该点像素,若不就是,则不绘。
上图中红色为Cohen-Sutherland裁剪,绿色为圆裁剪,黑色为多边形裁剪
6、图形的几何变换
图形的几何变换分为平移、旋转、缩放与对称变换功能
平移:
点击相应的平移操作,屏幕中会出现一个小正方形,单击鼠标左键,再根据橡皮筋拉伸,后单击鼠标左键以确定平移量来进行图像的平移操作。
旋转:
点击相应的旋转操作,屏幕中会出现一个小正方形,单击鼠标左键,再根据橡皮筋拉伸,后单击鼠标左键以确定旋转角度来进行图像的旋转操作。
缩放:
点击相应的缩放操作,屏幕中会出现一个小正方形,单击鼠标左键,再根据橡皮筋拉伸,后单击鼠标左键以确定缩放比例来进行图像的缩放操作。
对称:
点击相应的对称变换操作,屏幕中会出现一个小正方形,单击鼠标左键,再根据橡皮筋拉伸,后单击鼠标左键以确定对称轴来进行图像的对称变换。
平移:
旋转:
缩放:
对称:
四、实习的主要体会
AutoCAD心得体会
实习的第一周进行的就是AutoCAD的实习,在老师的讲解以及演示下,我逐渐的了解了AutuCAD的基本使用方法,跟着老师的演示过程学会了该软件的基本操作流程。
对于AutoCAD的基本绘图功能的实现,我根据指导书的指导,采用边完成简单图形边学习各种命令的方式,逐渐熟练掌握了AutoCAD的基本绘图功能的使用。
熟练掌握了其基本绘图功能,如掌握了绘图命令POINT、LINE、CIRCLE、ARC、DONUT、RECTANGLE、POLYLINE的功能及操作;掌握了实体绘图命令键盘输入的方法;掌握了缩放命令(ZOOM)的使用方法等。
由于指导书上的的操作内容很详尽,所以在绘制前面那些比较基础的图形时没有遇到什么困难,通过前面一些基本的图形的绘制,我逐渐熟悉了利用AutoCAD进行简单图形的绘制,掌握了基本绘图命令,感觉CAD的操作并不难,很容易上手,但还就是有需要特别注意的地方,比如在绘图之前最好先设置好绘图区域界限,并使图幅图幅布满整个屏幕,这样能够避免图形绘制后太小甚至瞧不见的情况;在绘图的过程中,要注意建立图层来画出相应的辅助线,有助于图像的生成,在标记的过程中,要根据实际情况,建立不同的标注样式。
随着实习的深入,逐渐从刚开始的画直线、圆、弧的基本操作转到后来的公切圆、公切线以及对图形进行编辑,开始进行复杂图形的绘制,就感觉自己的练习还远远不够,不能比较快速的绘制出图形,有时会因为没有找到相关图形的关系而浪费太多时间,甚至通过计算来确定她们的关系,这说明我平时的练习还不足够,因为AutoCAD的就是使用就是不需要太多的计算的,只需要建立相关的辅助线,然后通过图形的编辑命令就可以快速且准确的绘制出来。
比如用TRIM对图形进行裁剪,用MIRROR对图像进行镜面对称,都可以大大节省我们的画图时间,还可以采用阵列操作很方便的画出某些图形,比如铣刀的绘制,如果不采用阵列的操作,绘制起来会特别麻烦,但就是经过阵列操作后,就能快速而准确的绘制出图形。
由于平时没有进行过三维图形的绘制练习,在考核时没能在规定时间内完成三维图形,考核之后才将三维图形的练习给绘制出来,这也充分说明我学习的知识还不足够,要想充分掌握AutoCAD的使用技巧,绝不仅仅靠这一周的实习就能够掌握的,还需要我在今后的学习生活中多加练习,才能掌握好该软件。
经过这一周的练习,我还就是掌握了一些关于AutuCAD软件操作的方法,对于图形的绘制也有了更深的理解,这次的实习也让我总结了不少绘图的经验,当我们拿到一幅图要进行绘制时,需要先分析图形的链接情况,各部分的关系,再进行图形的绘制。
作为遥感专业的学生,以后还就是会有很多机会跟图形绘制打交道的,这就要求我们还需在课外自己去熟练掌握该软件的使用,为今后的学习打下扎实基础。
基于VC6、0下的计算机图形学程序编写心得体会
实习第二周进行的就是基于vc6、0的计算机图形学编程实习,这次实习的内容时间我们在课堂上所学到的知识进行实践操作。
通过本次的编程实习,我收获颇多,一方面,经过本次的编程实习,我重新掌握了计算机图形学的相关知识,加深了对图形的生成(如直线、圆、曲线生成等)的理解,也让我重温了图形变换(如平移、旋转、缩放、对称)的思想,更让我重新学习了图形二维裁剪(圆裁剪、多边形裁剪等)、图形填充(种子填充、边缘填充、扫描线填充)的相关知识。
另一方面,经过这次的编程实习,也让我加深了对MFC编程的理解,巩固了大一学习的C++相关知识,还学会了橡皮筋技术以及鼠标坐标显示。
这次的实习内容指导书上也有详尽的操作过程,所以对于指导书给出的内容进行的编程过程中没有遇到太多困难。
本次实习最大的收获就就是完成了指导书上所没有的程序,比如中点画线法、B样条曲线、Hemite曲线、缩放、旋转、中点分割法等,通过对比指导书上的例子,结合课本上的知识及代码,更换相应的函数,对相应的内容进行修改,这样不仅能在练习的过程中掌握相关的思想,同时还增强了自己的编程能力。
当然,在练习的过程中还就是发现自己还有许多不足的地方,比如刚开始时,画完的线中还残留有橡皮筋画出的线,不知如何去掉,在助教的指导下才完成了橡皮筋的擦除,这也说明我的编程能力还有待进一步提高。
在今后的学习中,还需要更加努力的学习相关学科的知识,为以后走上工作岗位打下扎实基础。
总之,经过了这为期两周的计算机图形学实习,尽管实习期间有多门课程的考试,我还就是顺利的完成了实习内容,也学到了不少东西,不仅学会了AutoCAD的简单操作,也加强了自己的编程能力,同时巩固了自己对于计算机图形学相关知识的理解。
最后感谢老师以及助教这两周的耐心指导,让我成长了不少,进步了不少,在以后学习中,我会更加注意自己存在的问题,继续努力,不断提高自己各方面的能力。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 图形学 实习 报告