




已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
仲恺农业工程学院课程设计报告( 20102011年度第2学期)名 称: 计算机图形学课程设计 题 目: 交互式绘图系统 院 系: 计算科学系 班 级: 信息与计算科学081学 号: 200811314109 200811314118 200811314124 学生姓名: 谢伟斌、方忠煌、阮喜城 指导教师: 胡小健 设计周数: 1 成 绩: 日期: 20011年 6月21日目 录一、课程设计的目的与要求1二、设计正文11 需求分析12 概要设计23 详细设计44.调试分析145.测试结果146.用户使用说明30三、课程设计总结或结论32参考文献32附录(其他必要资料,不需要源代码)32交互式绘图系统一、课程设计的目的与要求课程设计是信息与计算科学专业集中实践性环节之一,是学习完计算机图形学课程后进行的一次全面的综合练习。其目的是: (1)要达到理论与实际应用相结合,使学生能够根据数据对象的特性,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,并培养良好的程序设计技能。 (2)在实践中认识为什么要学习数据结构,掌握数据结构、程序设计语言、程序设计技术之间的关系,是前面所学知识的综合和回顾。要求(1)了解并掌握交互式图形系统的设计方法,具备初步的独立分析和设计能力;(2)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;(3)提高综合运用所学的理论知识和方法独立分析和解决问题的能力;(4)训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。(5)设计的题目要求达到一定工作量,并具有一定的深度和难度。(6)编写出课程设计说明书。二、设计正文1 需求分析(1)需求分析报告的编写目的 本需求分析报告的目的是规范化本软件的编写,旨在于提高软件开发过程中的能见度,便于对软件开发过程中的控制与管理,同时提出了本交互式绘图系统的软件开发过程,便于程序员与客户之间的交流、协作,并作为工作成果的原始依据,同时也表明了本软件的共性,以期能够获得更大范围的应用。 (2)产品背景明细 软件名称:交互式绘图系统(3)缩写及缩略语 交互式绘图系统软件:基本元素为构成绘图技巧及相关行为所必须的各种部分。 需求:用户解决问题或达到目标所需的条件或功能;系统或系统部件要满足标准,规范或其它正式规定文档所需具有的条件或权能。 需求分析:包括提炼,分析和仔细审查已收集到的需求,以确保所有的风险承担者都明其含义并找出其中的错误,遗憾或其它不足的地方。 模块的独立性:是指软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其他的模块的接口是简单的。 本工程描述: (1)软件开发的目标: 完善目前交互式绘图系统,使之能跟上时代的发展。同时通过实践来提高自己的动手能力。 (2)应用范围: 理论上能够实现课本中基本的绘图系统,其目的在于在原有的系统基础使得绘图功能更加强大和可交互,以期实现完善更多实用绘图功能。2 概要设计1引言1.1编写目的本系统通过计算机技术为绘图带来方便和准确。目标还包括:提高绘图准确度;改进绘图技术;系统设计优良,界面设计精美、友好、快捷,人性化设计1.2项目背景了解目前绘图软件的现状、存在的问题及学生与教师的想法。通过实地观察了解目前急需改善的绘图技术,并充分了解绘图的绘制流程,记录和研究相关的算法数据供日后系统的分析使用。2总体设计2。1总体结构系统按章节分成9个相对的功能模块,但各个模块都是进行集中式管理。在该系统中,各模块不存在耦合性,各模块拥有其独立的操作权,保证系统的安全性。系统管理第十章第二章第三章第九章第八章第七章第六章第五章第四章22功能分配第二章:变化的环、rpg演示第三章:反走样直线、直线的像素级算法、颜色渐变直线第四章:填充矩形、填充正方形、带外边矩形的边缘填充算法第五章:复合旋转变换、窗口和视图第六章:斜轴侧图、旋转正方体透视投影、旋转正方体正交投影带类第七章:三次cardinal样条曲线、二次bezier曲线、三次bezier曲线、decasteliau曲线、样条曲线几何原理演示、三次b样条曲线和三次bezier曲线的对比、双三次b样条曲面49重点、动态旋转双三次bezier曲面实体模型第八章:kochsnow、sierpinski三角形、sierpinski地毯、caley三叉树、单规制l系统分形草、多规则l系统摇曳的小草、sierpinski地毯ifs、枫叶拼贴第九章:正四面体、正三菱体、正八面体、立方体画家算法、三个条第十章:国际象棋棋盘、原色混合系统、绘制六边形、旋转五角星3接口设计3。1外部接口用户界面在用户界面部分,根据需求分析的结果,用户需要一个用户友善界面。在界面设计上,应做到简单明了,易于操作,并且要注意到界面的布局,应突出的显示重要以及出错信息。外观上也应要做到合理化,考虑到用户对多window风格较为熟悉,应尽量在这个方向靠拢。在设计语言上通过自己学习 ,基本上决定使用mfc设计系统界面,易于管理。3。2内部接口初始化模块:对系统进行初始化;系统功能模块:接受系统功能地相应消息,启动对应的绘图功能。4维护模块对于系统较小,所以没有外加维护模块,因为维护工作较简单,仅通过手工监测和维护足以应付。3 详细设计3.1 算法分析3.1.1第二章(1)变化的环变形的环算法分析:在mfc中可以直接完成自定义类的任务,这里定义了二维点类cp2,将一个点的双精度型x,y坐标作为整体来处理。在mfc中并没有专门的画圆函数,圆的绘制是通过绘制长半轴和短半轴的椭圆来实现的。在绘制椭圆时,使用当前画刷填充椭圆内部,使用当前画笔绘制椭圆边界线。本功能需要绘制空心圆,所以选择透明画刷来实现。(2)rgb演示rpg演示的算法分析:颜色在系统中使用colorref类型定义的,格式为0x00bbggrr.rgb取值范围为规定的0255。本功能中使用getrvalue函数获取颜色的红色分量,使用getgvalue获取颜色的绿色分量,getbvalue函数来获取蓝色分量。对于十六进制代码的输出这里使用整数向字符串的转变函数_itoa。对于一个字节的颜色分量,分为高4位和低四位,如果分量小于16,则高4位为0,低4位的值为itoa计算的值。3.1.2第三章(1)反走样直线dbca这种生成直线的算法与数值微分法类似,每次迭代在增量最大方向上均走步,其方向由增量的正负而定;另一方向上是否也走,取决于计算出来的误差项,误差项所记录的方向同最大增量方向垂直。下面讨论误差项,如图(3)所示。图(3) 误差项计算示意图设图(3)中直线满足:0,即:0,所以x为最大增量方向,有-=1,故有每点的坐标计算: (4)因此直线上点的显示坐标为,round(),round()表示最靠近y的整数。从图(3)可以看出,对于计算出来的(,)点,的取之为;计算出来的( ,)点,的取值为。其根据就是因为更靠近,更靠近。图(3)中a点为与的中心点,计算bc长度,若值大于0.5,说明在a点之上,应取,否则取值。设误差: (5) 当,b点在a点上方,有;当0,b点在a点下方,有。由公式(4)(5)得: (2)直线的像素级算法使用两重循环再屏幕上绘制40*30个小矩形,矩形的中心点为参考点,然后根据0=k=1的直线中点bresenham算法的计算结果,使用黑色填充每个小矩形。(3) 颜色渐变直线颜色渐变直线算法:给定直线段起点坐标p0(x0,y0)和颜色值c0,给定直线段终点坐标p1(x1,y1)和颜色值c1使用直线段上p(x,y)的颜色值c可以使用拉格朗日线性插值公式计算。如果0=k=1时或-1=k1时或k-1时,y方向为主位移方向,有3.1.3第四章(1) 填充矩形填充矩形算法分析:当正方形旋转时,随着转角的不同,其有效边表和边表是实时动态变化的。该功能通过采用有效边表填充法来实现图形的填充。有效边表填充算法的原理: 多边形的有效边表填充算法的基本原理是按照扫描线从小到大的移动顺序,计算当前扫描线与多边形各边的交点,然后把这些交点按x值递增的顺序进行排序、配对,以确定填充区间,然后用指定颜色点亮填充区间内的所有像素,即完成填充工作。有效边表填充算法通过访问多边形覆盖区间内的每个像素,可以填充凸、凹多边形和环。(2) 填充正方形p0p1p2p3p4p5p6p7p8p0p1p2p3p4p5p6p7p8填充正方形算法分析:在多边形填充过程中,常采用“下闭上开”和“左闭右开”的原则对边界像素进行处理。图4-1的处理结果如图4-2所示,每个小正方形的右边界像素和上边界像素都没有填充。图4-3的处理结果如图4-4所示,上面一行像素和右面一列像素没有填充。 图 4-1 边界像素的问题 图 4-2 边界像素的处理图 4-3 面积33 图 4-4 面积22 (3) 带外边矩形的边缘填充算法图 4-5 边缘填充算法示例多边形p0(x0,y0)p1(x1,y1)e0e1e2e3e4e5e6带外边矩形的边缘填充算法:边缘填充算法是求出多边形的每条边与扫描线的交点,然后将交点右侧的所有像素颜色全部取为反色。按任意顺序处理完多边形的所有边后,就完成了多边形的填充任务。3.1.4第五章(1) 复合旋转变换复合旋转变换算法分析:本功能要求实现二维复合旋转变换,通过映射模式函数,屏幕坐标系为:原点位于屏幕中心(maxx/2,maxy/2),x轴水平向右,y轴垂直向上。二维变换矩阵可以用数组t33实现。二维复合旋转变换分为三步完成。平移变换、旋转变换和反平移变换。功能实现是通过动画按钮调用settimer函数和killtimer函数完成的。settimer函数启动定时器,killtimer函数关闭定时器。(2) 窗口和视图窗口和视图演示算法分析:将屏幕划分为两个窗口,左边代表窗口,右边代表视图。使用cohen-sutherland算法实现。 cohen-sutherland直线裁剪算法是最早流行的编码算法。每条直线的端点都被赋予一组四位二进制代码,称为区域编码(region code,rc),用来标识直线端点相对于窗口边界及其延长线的位置。假设窗口是标准矩形,由上(y=wyt)、下(y=wyb)、左(x=wxl)、右(x=wxr四条边组成,如图5-2所示。延长窗口四条边形成9个区域,如图5-1所示。这样根据直线的任一端点p(x,y)所处的窗口区域位置,可以赋予一组4位二进制区域码rc4rc3rc2rc1。 5-1 窗口坐标 5-2 区域编码 3.1.5第六章(1)斜轴侧图斜轴侧图算法原理:斜等侧图的投影变换矩阵为:由此建立数学模型。(2) 旋转正方体透视投影旋转正方体透视投影算法分析:正交投影是假视点在无穷远处,物体投影后尺寸不发生变化。正交投影变换实现的方法是物体坐标发生改变,视点不动,观察到物体在旋转。透视投影是假定视点在有限的范围内,物体投影后呈近大远小。透视投影变换实现的方法是物体坐标不发生变化,视点在转动,同样观察到物体在旋转。(3) 旋转正方体正交投影带类旋转正方体正交投影带类算法分析:类的模块化原则,要对类进行独立设置,完成所属功能。本功能设计中将物体定义为ccube类,将三维基本变换定义为ctransform类,然后使用类对象在ctestview类中操纵物体。3.1.6第七章(1)三次cardinal样条曲线三次cardinal样条曲线算法分析:cardinal样条曲线像hermite一样也是插值分段三次曲线,且边界条件也是限定每段曲线端点处的一阶导数。在cardinal样条曲线中端点处的一阶导数是由两个相邻型值点坐标来计算的。(2) 二次bezier曲线二次bezier曲线算法分析:当n2时,bezier曲线的控制多边形有三个控制点p0、p1和p2,bezier曲线是二次多项式。可以证明,二次bezier曲线是一段抛物线。(3) 三次bezier曲线三次bezier曲线算法分析:当n3时,bezier曲线的控制多边形有四个控制点p0、p1、p2和p3,bezier曲线是三次多项式。 可以证明,三次bezier曲线是自由曲线。(4) decasteliau曲线decasteliau曲线算法分析:本功能要求使用鼠标在屏幕左击绘制控制点,由于实际的屏幕像素点很小,所以绘制的控制点实际上是半径为2个像素的实心圆。(5) 样条曲线几何原理演示样条曲线几何原理演示的算法分析:三次b样条曲线的n3,k0,1,2,3,控制多边形有四个控制点p0、p1、p2 和p3,b样条曲线是三次多项式。 从图7-1可以看出,曲线的起点p(0)位于p0p1p2底边p0p2的中线上,且距p1点三分之一处。该点处的切矢量p(0)平行于p0p1p2的底边p0p2,且长度为其二分之一。该点处的二阶导数p”(0) 沿着中线p1pm方向,长度等于中线的两倍。曲线终点p(1)位于p1p2p3底边p1p3的中线上,且距p2点三分之一处。该点处的切矢量p(1)平行于p1p2p3的底边p1p3,且长度为其二分之一。该点处的二阶导数p”(1)沿着中线方向,长度等于中线的两倍。这样,四个顶点p0p1p2 p3确定一段三次b样条曲线。从图中还可以看出,一般情况下,b样条曲线不经过控制点,曲线起点只与前三个控制点有关,终点只与后三个控制点有关。图7-1(6) 三次b样条曲线和三次bezier曲线的对比三次b样条曲线和三次bezier曲线的对比算法分析:bezier曲线和b样条曲线相比,前者与控制多边形的逼近程度较差。在该功能演示中队读入的4个控制点分别进行两种曲线算法进行绘制,直接进行对比。(7) 双三次b样条曲面49重点双三次b样条曲面49重点的算法分析:对于双三次b样条曲面,如果控制多边形的顶点共线,曲面将退化产生尖点。本功能演示中控制点数为7*7,而双三次b样条曲面的顶点矩阵为4*4,需要对49个顶点的矩阵进行分块运算。使用双三次b样条曲面的定义根据控制多边形的顶点进行曲面绘制,这里使用了矩阵运算。控制多边形的绘制分别分为前后和左右两个方向进行。双三次b样条曲面算法:双三次b样条曲面是由三次b样条曲线交织而成。曲面生成时可以通过固定u, 变化v得到一簇三次b样条曲线;固定v,变化u得到另一簇三次b样条曲线。与三次b样条曲线相似,双三次b样条曲面一般情况下不通过控制网格的任何一个顶点。优点是极为自然地解决了曲面片之间地连接问题。(8) 动态旋转双三次bezier曲面实体模型动态旋转双三次bezier曲面实体模型的算法分析:前面的双三次b样条曲面是通过使用轴侧投影绘制的,曲面不能旋转。而本功能则使用正交投影绘制动态曲面,使用鼠标或键盘可以控制曲面和控制多边形的旋转角度,以利于不同的方向观察曲面。3.1.7第八章(1) kochsnowkoch雪花算法设计:分数维图形的细节变化可以用数字d来描述,d称为分形维数,它是图形粗细性的度量,同图形每一步细分数目和缩放倍数有关。设n为图形每一步细分的数目,s为细分时缩放因子,分形维数d定义为:(2) sierpinski三角形 sierpinski三角形的算法设计:典型的sierpinski垫片的基本图像是正三角形,内部图形的舍弃是通过填充函数实现的。本功能中设定基本图形为直角三角形,内部的图形舍弃是通过绘制线框实现的。随着递归深度的增加,未舍弃的图形会继续递归,就逐渐显现出sierpinski垫片的形状。(3) sierpinski地毯sierpinski地毯的算法设计:典型的sierpinski地毯的基本图像是正方形,内部图形的舍弃是通过填充函数实现的。本功能中设定为屏幕客户区矩形,内部的图形舍弃是通过绘制线框实现的。(4) caley三叉树caley三叉树的算法设计:选定树的生成元为三叉树,主干和树杈的夹角为45度。(5) 单规制l系统分形草单规制l系统分形草的算法设计:l系统模型也称为ls文法构图法。主要包括文法的生成和文法的解释两部分。文法的生成是使用字符串中字母替换的方式实现,文法的解释是“f”代表绘制直线,规定正向角“+”是逆时针方向,负向角“-”是顺时针方向, : 存储分支点,: 释放分支点。字符串可以定义为cstring类型,使用下标访问字符串中的每个字母。单规制ls是使用一个字符来进行文法的生成的。(6) 多规则l系统摇曳的小草 多规则l系统摇曳的小草的算法分析:多规则是使用多个字符串进行文法生成。本功能演示中使用了两个生成规则。其中x和y只作为因子进行字符串的替换并不参与绘图。(7) sierpinski地毯ifs sierpinski地毯ifs的算法分析:迭代函数系统ifs的构造分形图形的重要方法之一,只要计算出由6个压缩仿射变换系数a,b,c,d,e,f和伴随概率p组成的ifs码,就可以使用统一的程序完成图形绘制,只要注意伴随概率需要进行归一化处理。(8) 枫叶拼贴枫叶拼贴算法分析:枫叶拼贴采用的也是如上的ifs,只需将ifs码代入程序即可绘制。3.1.8第九章(1)正四面体正四面体算法分析:将正四面体的重心建立于坐标系原点。对每个表面正三角形,使用表面视矢量和表面法矢量的点积是否大于零来进行消隐,也叫背面剔除。本功能的难度(2) 正三菱体正三菱体算法分析:本功能与上题基本一致,将正三菱体的重心建立在坐标系原点。建立其数学模型。将坐标系中心建立在正三菱柱的体心处,三维坐标系的xyz轴成右手系,z轴指向使用者。(3) 正八面体正八面体算法分析:正八面体有6个顶点和8个面,在建立模型时可以参考正方体,修改其点表和面表。(4) 立方体画家算法立方体画家算法的算法分析:一般立方体的绘制可以通过建立点表和面表,然后使用背面剔除的方法实现。然而该功能在设计上采用对8个顶点进行深度排序,绘制各个顶点相邻的三个面。(5) 三个条三个条的绘制算法分析:该功能通过zbuffer深度算法实现,该算法是根据立体的深度缓冲器中的值来绘制相应像素点的颜色缓冲器中的值。3个条是3个小长方体,彼此相互叠压。在绘制投影时,需要对3个条沿长度方向设置不同的深度值才能实现。3.1.9第十章(1) 国际象棋棋盘国际象棋棋盘的设计算法分析:模拟国际象棋棋盘的黑白相间的方格的纹理函数定义在单位正方形区域上。其中,0a1,0b1,表示小于x的最大整数。a和b用于rgb函数表示颜色值。若ab第一个网格为白色。这里a和b保持开区间,是因为a或b取0时,白色方格将和屏幕底色融为一体。在算法中,可以使用向下取整实现,即int(x)。奇数和偶数可以使用对2求余实现。如果结果为0是偶数,否则为奇数。(2) 原色混合系统原色混合系统的算法分析:计算机图形学中有两种重要的原始混合系统:rbg加色系统和cmy减色系统。两种系统中的原色互为补色。在算法实现上加色系统使用“或运算”,减色系统采用“与运算”来实现。(3) 绘制六边形绘制六边形的算法设计分析:恒定颜色模型是指使用同一种颜色填充面片,渐变颜色模型是指使用过渡色填充面片。本功能演示的正六边形可以划分为6个三角形。顶点颜色为黄、品红、红色、青、绿色和蓝色,中心处为白色。如果使用恒定颜色模型填充,则仅使用前六种颜色,如果使用渐变颜色模型填充,则使用全部7种颜色。对于渐变颜色模型,使用颜色双线性插值函数来实现。(4) 旋转五角星旋转五角星算法分析:五角星是凹多面体,直接对线框模型消隐有一定的难度。如果使用表面模型,则可使用zbffer算法实现消隐。五角星的绘制过程中要求对角线共线,也就是五角星的内接圆半径r1和外接圆半径r2成比例,根据几何知识可得到z-buffer:这是一项处理3d物体深度信息的技术,它对不同物体和同一物体不同部分的当前z坐标进行纪录,在进行着色时,对那些在其他物体背后的结构进行消隐,使它们不被显示出来。z bufer所用的位数越高,则代表它能够提供的景深值就越精确 4.调试分析编码调试过程遇到的问题,解决方法。在系统运行过程中,曾出现过一下问题:l 动画开关的控制,在5.3节程序中,play开关的代码控制领域不好,导致了其开关影响到别的功能的使用,通过调整之后能够正常发挥其所需的功能;l 点击动画运行,但是它却不动,debug之后才发现是ontimer方法中的重画方法没有写好;l 运行程序出现没有画面,调试分析很久之后才发现自己很愚蠢,因为很多参数都没有初始化怎么会有画面,哪些顶点的数组都没有初始值,因而没有画面显示。5.测试结果第二章:变化的环 rpg演示 第三章:反走样直线 直线的像素级算法 颜色渐变直线第四章:填充矩形填充正方形带外边矩形的边缘填充算法第五章:复合旋转变换窗口和视图第六章:斜轴侧图旋转正方体透视投影旋转正方体正交投影带类第七章:三次cardinal样条曲线二次bezier曲线三次bezier曲线decasteliau曲线样条曲线几何原理演示三次b样条曲线和三次bezier曲线的对比双三次b样条曲面49重点动态旋转双三次bezier曲面实体模型第八章:kochsnowsierpinski三角
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 消防知识试题及答案
- 急救知识试题题目(含答案)
- 初级注册安全工程师考试真题及答案
- 2024年演出经纪人继续教育题库附答案(巩固)
- 2024年经呼吸道传播疾病院感防控理论考核试题及答案
- 2025年教师国际交流与合作聘用协议
- 工程机械系毕业论文范文
- 2024年演出经纪人继续教育题库含完整答案(历年真题)
- 浅析高中语文教学中学生主导课堂的教学模式
- 消防安全知识培训试题选择题(附答案)
- 苏教版分式章起始课-展示课件
- 《茶文化与茶健康》第一讲
- OBE理念下的小学音乐教学设计反向思路初探
- GB 24541-2022手部防护机械危害防护手套
- 《PLC与变频器控制》课件 1.PLC概述
- 智慧产业园综合管理平台解决方案
- 国王的恩赐-传奇-任务全书
- 资产负债表(个体工商户)
- 手枪射击技巧
- 水浒人物介绍-鲁智深
- 呼吸系统疾病患儿的护理课件
评论
0/150
提交评论