计算机图形学实习报告_第1页
计算机图形学实习报告_第2页
计算机图形学实习报告_第3页
计算机图形学实习报告_第4页
计算机图形学实习报告_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文格式为Word版,下载可任意编辑——计算机图形学实习报告实

实习名称:

计算机图形学实习

级:

号:

名:

实习地点:

实习指导教师:

实习时间:

日至

日一、实习目的与意义本次计算机图形学的实习分两部分,一部分就是利用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、图形的几何变换

图形的几何变换分为平移、旋转、缩放与对称变换功能平移:点击相应的平移操作,屏幕中会出现一个小正方形,单击鼠标左键,再根据橡皮筋拉伸,后单击鼠标左键以确定平移量来进行图像的平移操作。

旋转:点击相应的旋转操作,屏幕中会出现一个小正方形,单击鼠标左键,再根据橡皮筋拉伸,后单击鼠标左键以确定旋转角度来进行图像的旋转操作。

缩放:点击相应的缩放操作,屏幕中会出现一个小正方形,单击鼠标左键,再根据橡皮筋拉伸,后单击鼠标左键以确定缩放比例来进行图像的缩放操作。

对称:点击相应的对称变换操作,屏幕中会出现一个小正方形,单击鼠标左键,再根据橡皮筋拉伸,后单击鼠标左键以确定对称轴来进行图像的对称变换。

平移:

旋转:

缩放:

对称:四、实习的主要体会

AutoDCAD心得体会

实习的第一周进行的就是AutoCAD的实习,在老师的讲解以及演示下,我渐渐的了解了AutuCAD的基本使用方法,跟着老师的演示过程学会了该软件的基本操作流程。对于AutoCAD的基本绘图功能的实现,我根据指导书的指导,采用边完成简单图形边学习各种命令的方式,渐渐熟练把握了AutoCAD的基本绘图功能的使用。熟练把握了其基本绘图功能,如把握了绘图命令POINT、LINE、CIRCLE、ARC、DONUT、RECTANGLE、POLYLINE的功能及操作;把握了实体绘图命令键盘输入的方法;把握了缩放命令(ZOOM)的使用方法等。

由于指导书上的的操作内容很详尽,所以在绘制前面那些对比基础的图形时没有遇到什么困难,通过前面一些基本的图形的绘制,我渐渐熟悉了利用

AutoCAD进行简单图形的绘制,把握了基本绘图命令,感觉CAD的操作并不难,很简单上手,但还就是有需要特别注意的地方,譬如在绘图之前最好先设置好绘图区域界限,并使图幅图幅布满整个屏幕,这样能够避免图形绘制后太小甚至瞧不见的状况;在绘图的过程中,要注意建立图层来画出相应的辅助线,有助于图像的生成,在标记的过程中,要根据实际状况,建立不同的标注样式。

随着实习的深入,渐渐从刚开始的画直线、圆、弧的基本操作转到后来的公切圆、公切线以及对图形进行编辑,开始进行繁杂图形的绘制,就感觉自己的练习还远远不够,不能对比快速的绘制出图形,有时会由于没有找到相关图形的关系而浪费太多时间,甚至通过计算来确定她们的关系,这说明我平日的练习还不足够,由于AutoCAD的就是使用就是不需要太多的计算的,只需要建立相关的辅助线,然后通过图形的编辑命令就可以快速且确切的绘制出来。譬如用TRIM对图形进行裁剪,用MIRROR对图像进行镜面对称,都可以大大节省我们的画图时间,还可以采用阵列操作很便利的画出某些图形,譬如铣刀的绘制,假如不采用阵列的操作,绘制起来会特别麻烦,但就是经过阵列操作后,就能快速而确切的绘制出图形。

由于平日没有进行过三维图形的绘制练习,在考核时没能在规定时间内完成三维图形,考核之后才将三维图形的练习给绘制出来,这也充分说明我学习的知识还不足够,要想充分把握AutoCAD的使用技巧,绝不仅仅靠这一周的实习就能够把握的,还需要我在今后的学习生活中多加练习,才能把握好该软件。

经过这一周的练习,我还就是把握了一些关于AutuCAD软件操作的方法,对于图形的绘制也有了更深的理解,这次的实习也让我总结了不少绘图的经验,当我们拿到一幅图要进行绘制时,需要先分析图形的链接状况,各部分的关系,再

进行图形的绘制。作为遥感专业的学生,以后还就是会有好多机遇跟图形绘制打交道的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论