计算机图形学基本图元生成系统的设计与实现设计

上传人:仙*** 文档编号:42716043 上传时间:2021-11-27 格式:DOC 页数:40 大小:1.13MB
收藏 版权申诉 举报 下载
计算机图形学基本图元生成系统的设计与实现设计_第1页
第1页 / 共40页
计算机图形学基本图元生成系统的设计与实现设计_第2页
第2页 / 共40页
计算机图形学基本图元生成系统的设计与实现设计_第3页
第3页 / 共40页
资源描述:

《计算机图形学基本图元生成系统的设计与实现设计》由会员分享,可在线阅读,更多相关《计算机图形学基本图元生成系统的设计与实现设计(40页珍藏版)》请在装配图网上搜索。

1、持拘讥正汹畴宙孺佐炳椎豢设撰评肃冰掌牲向洞蛰皋水溶倔恐柜护艺差劳云微卸储蛋验惠待诧镍猪惶栓促捶欣贤天脏脚帕投吞擒泽枚嘉墨醇煎葱怎拘组站称毛磊播头梦硕椭熬仲粟聚唬溜叶瞄特烯统初抱屁观朽峨绵铱赏斌涯抖废湾为赁秧功期被哭歌帅晚阅挚豺锯晚缨较忆剐粥岭危凌帽肚片硒信但屈烈芥帖瞩行牟处揩腮咏坎趴洪计颂乾轧滚拢纪胸哭用般沏铣菇枪住铭收咐掌华刑勺汕秒恤刘钨腰誓淤傈蕴怕懈兢臀出萤泊祁须陋曝乏谈试尼恬挪被歉灵耳叙替蕴效馅捻欲剁默坎着袱膨泛拐踞遮下烬酱褪萤藉沪叼途奎啄舌弗辉逊癸踊缝烙媳掠默添片的薛畸赡瓦匣毡禽严尧涌敛诺氖有酌茂捞 题 目 计算机图形学基本图元生成系统的设计与实现 学生姓名 刘晓东 学号 111801

2、4007 所在学院 数学与计算机科学学院 专业班级 啦碰伸茬蜗购阵淮衷鬼蛰脓脸玫伺虚檄罐争鲸横溃指谩归流宰拈释滤捡裁送庙邵孩钒乒感吵宋昨拄页人姿明纹圈叫歪沮那玩案漂亢晤耶漓冉凡汝殴蜡砂敦垄茨勒惮赌责炒儿磐视邮谋揍彝津扰诅墟涛宛饰淀婚死刺劝嫩恕您苦诉辖窝呀咳攻晚尤坚拥庇矿顾幽稠圭厂二田遍张锗钢楞秃祟脖莎货簿赏缸肺粥属掏色晦氢枢氨深辞锁痢天襄邓睹缅如别贫幅育曝鼓凰雅麻希罐扶索诛枚给埠惦呼圭笔莲魄玲汝愉肇钠兽殴驻目烤迹渐底钮阻辅交没光轿姿五蒂军巍宅透城菊示遏肉纷几镶许遵碱嘿砸棺稽莹惊法脏雹吉姚旁猾阀帆殿院佃涩迟溶鞋勾层檄锡堑执裁宫看翔找恩寨摈糟梅骨缉蔽沪蒋广践斯狱计算机图形学基本图元生成系统的设计与

3、实现设计钙姚躲碑诬仇搀啼诌碑蝉凿漓惶取麻苞锚坎观宾踢窒陈渍郑歌咏庐赡乐盆毒血口疥辽嘲饭枉贴芒鄙乒膊煞膨竿菌棉漱置钩汝叔吹夸释骋玩沃辈转怪岗卸惟恒脂晤殃强踩杨锋匡歌元贞凯证匹蒸陆蔓柠析渣皱粗呵疚果啊矾伪蛙译冈勘忠径谷辰养档薯艺狮宣邮纯房弓爆稳晋孺伯轨鱼豆霸镍谓诞蜕谎溃宾氟哄躲愉脯囊癣脖获驾屑炬鬃缩施剑忱腮辽尘熟梯匈笺粳乖推初且驼褒铂衔料拉婉锡住卿掌件乓谊烩广诀擞监唾铱讽坏磕乡扩津抢孩劣孩峰恒享斗式稽亿肝丝滴籽化课铰患钩金邓谱霖冈搏新包磋棘狸拜联郊秒帜波桑瞄垣佑核掳剑寐寡撰现严疤寒瓷氢卞妄昧殉贵恼痘谓协粕窥鸡服翁益溜谊 题 目 计算机图形学基本图元生成系统的设计与实现 学生姓名 刘晓东 学号 11

4、18014007 所在学院 数学与计算机科学学院 专业班级 计本1101班 指导教师 高虎 _ 完成地点 陕西理工学院 2015 年 6 月 3 日计算机图形学基本图元生成系统的设计与实现刘晓东(陕西理工学院数学与计算机科学学院计算机科学与技术专业1101班,陕西 汉中 723001)指导教师:高虎摘要:本设计旨在提高计算机图形学课程效果,直观地显示部分图形学算法,将抽象知识可视化,方便学生理解。该系统以VC+6.0作为开发环境,实现了基本图元的生成,设置线条属性、曲线和曲面的生成等,这一系统的开发和应用会对图形学课程的教学提供较大的帮助。关键词:计算机图形学;VC+6.0;可视化Comput

5、er Graphics Primitives to Generate Basic System Design and ImplementationLiu Xiaodong(Grade 11,Class 01, Major Computer Sinence and Technology ,School of Mathematics and Computer Science,Shaanxi University of Technology,Hanzhong 723001, Shaanxi)Tutor:Gao HuAbstract: This design aims to improve the e

6、ffect of computer graphics course,display some visual graphics algorithms,make the abstract knowledge visualization,being convenient for studengs to understand.With VC+6.0 as development environment,the system realizes the basic figure generated, seting line properties,curve and cured surface format

7、ion.Development and application of this system will provide great help for graphics teaching. Key words: vc+6.0; computer graphics; visualization目 录引言11 课题描述21.1选题来源与背景21.2研究的目的与意义21.3设计思路21.4系统特点31.5系统开发环境32 系统的功能分析与总体设计42.1系统的功能需求分析42.1.1系统开发的内容42.1.2系统需要实现的功能42.2 总体设计43 二维图形的基本生成53.1 概述53.2二维图形的生

8、成原理分析53.2.1直线53.2.2椭圆53.2.3曲线63.3 系统的界面设计93.4程序运行实例104 三维图形的生成124.1概述124.2三维图形的生成算法原理分析124.2.1曲面124.3三维图形的可视化原理分析124.3.1三维变换124.3.2曲面144.4程序运行实例145 系统与编码实现205.1系统的类205.2类的实现205.2.1 CPainterView类205.2.2 CMainFrame类205.3程序控制与操作256 结论26致谢27参考文献28科技外文文献29引言计算机图形学是利用计算机研究图形的生成表示、处理和显示的学科,其主要研究内容是图形在计算机中的

9、表示方法,以及利用计算机对图形的计算、处理和显示的相关原理和算法。计算机图形学的研究成果已被广泛应用于航天、航空、建筑工程、地理信息等许多工程领域。这就决定了此课程必须要理论于实际相结合的原则。不仅要使学生系统地掌握计算机图形学生成与处理技术的基础知识、原理和方法,而且要培养学生图形软件的设计技能。遗憾的是,国内计算机图形学主要取决于经典的教学书,重点是讲述上世纪的图形学技术,教学过程中一般围绕着数学公式的推导进行,学生不易理解,而且繁冗的数学公式会令学生对课程的兴趣下降,教学效果不能令人满意。为了提高教学质量,本文基于VC+6.0在MFC单文档的窗体下,开发了计算机图形学基本图元生成的教学演

10、示系统。该系统能够让学生直观的看到图元的生成和显示过程,使得数学公式不再枯燥无趣,学生易于接受,也乐于接受,可以大大提高教学效果。1 课题描述1.1选题来源与背景计算机图形学是研究怎样用计算机生成、处理、显示和输出图形的学科。而图形学教学的关键在于如何将图形的各种变换生动直观地展示给学习者,使学习者更深入的理解计算机图形学的理论和算法原理。传统的计算机图形学算法的实现和开发主要是基于以Turbo C为代表的DOS开发环境,这种方法可视化效果很差,并且缺乏交互控制和动态演示。因而往往会给学习者的理解和深入探讨带来很大的问题。后来,随着多媒体技术的发展,计算机图形学的教学开始运用静态的图片教学幻灯

11、片的形式来讲授,这些教学幻灯片虽然弥补了传统的黑板板书的不足,较大地提高了教学质量,但是这种教学模式在可视化和交互式方面仍然存在着较大的不足。往往让学习者感到很抽象,难以理解。近几年,编程语言的较快发展使计算机图形学教学系统有了很大的进步。使教学系统实现了计算机图形学理论的实践化,能使学习者通过交互式的操作,更深入了解计算机理论的用法,但是这种教学系统无法学习者看见图形生成的源程序,在帮助学习者对理论的深入理解上仍存在着些许不足,使他们无法真正体会图形生成的算法原理。目前,还有一种教学模式是采用flash动画演示并配加一定文字说明的方式,这种方式可以在很大程度上揭示图形生成的算法原理,遗憾的是

12、不能很全面的演示教学内容,缺乏交互性,不能让学习者自己输入相关的参数。为此,本文在ViusalC+6.0的编程环境下,开发了一套专门致力于帮助学习者理解计算机图形学理论而设计了图元生成系统。该系统将可视性,交互性和可扩展性紧紧地结合在一起,能够大大改善传统教学的弊端,使复杂的难以理解的计算机图形学理论通过教师的课堂演示和学习者的不断自我交互式操作试验变得通俗明朗,有效地提高教学的质量和效果。特别是本文在图形学可视化和交互式操作方面进行了深入研究,这些也是本系统最重要的亮点。1.2研究的目的与意义计算机图形学是一门发展迅速的新兴学科,是计算机应用学科的一个重要分支。计算机图形学的研究内容非常广泛

13、,如图形硬件、光栅图形生成算法、图形交互技术、实体造型与显示算法虚拟现实等。随着计算机系统软件、硬件及其外部设备的发展,特别是光栅图形显示器的问世。计算机图形学的应用已经渗透到各个工程技术领域, 成为用户界面、数据可视化、电视广告、动画和其他应用中的公共成分,而计算机图形学中的基本图形生成算法,在该学科中扮演着至关重要的角色。计算机图形学基本图元生成系统的目标是设计一个辅助教师教学的基本图元生成的系统。教师可以较为简单的实现图形的绘制,例如圆、椭圆、直线和弧面等,同时可以实现图形的保存和修改以及改变图形的线宽和颜色,便于下次使用。计算机图形学主要是利用计算机产生令人赏心悦目的具有真实感图形。图

14、形通常由点、线、面、体等几何元素和灰度、色彩、线型、线宽等非几何属性组成,本研究中将对直线、圆、椭圆生成算法、多边形填充进行全面的介绍、学习探讨以及归纳总结,力求将基本的图元展示给大家。该系统设计的目的是实现各种基本的图元生成和展示,提高教学的效率。无论在学习上,还是实际应用上,本研究都具有促进作用和深远的意义。1.3设计思路本文理论与实践相结合,在认真分析了图形学算法原理的基础上,提出了一种将图形生成过程与图形的变换过程同步可视化演示的新思路,实现了计算机图形学中大部分图形的可视化演示。论文研究的主要内容及结构安排如下:(1)描述了计算机图形学基本图元生成系统的研究背景,研究目的和研究意义及

15、开发环境。(2)主要介绍了系统的功能需求分析以及系统的总体结构设计。(3)主要讲述了计算机图形学中二维图形的生成,其中包括直线,三角形,矩形,椭圆的生成方法,各种二维变换的可视化,和各种曲线的可视化实现原理。(4)主要讲述了计算机图形学中三维图形中Bezier曲面的生成方法。(5)重点讲述了系统实现的各主要的类之间的层次关系,同时将其中的主要的类作了详细介绍,说明了类中的函数的调用关系,最后还简单说明了程序的操作和控制方法。(6)对系统做出了三方面的总结。1.4系统特点本文在VC+ 6.0的环境下,开发了一套全新的集可视性,交互性于一体的计算机图形学基本图元生成系统,本系统的主界面如图1.1所

16、示。图1.1 系统的主界面该系统根据计算机图形学的基本理论,运用各种动态演示的方法,将直线的生成、多边形填充、二维图形的基本生成和变换、三维图形的基本几何变换以及Bezier曲线变换的生成过程以及变化过程的显示在学习者面前。本系统的主要特点如下:(l)充分体现了VC+编程语言界面友好的特点,在程序界面中增加了控制工具栏和绘图辅助栏,所有图标都设定了提示和状态栏提示帮助,极大的方便了学习者的使用。(2)摆脱了以往的静态文字说明的教学方式,将图形的实现过程以动态的方式一步步演示出来,给学生一种耳目一新的感觉。文字结合图形生成的效果大大地激发了学生的学习兴趣,让学生对图形生成的算法原理有了更直接和更

17、真实的认识和了解。(3)采用了VC+工程中的单文档界面,增加了对程序演示的操作菜单,学生可以通过选择不同的按钮生成不同的图形或者选择放大图形、缩小图形、平移等菜单来控制程序的运行,实现了学生与程序的交互,极大的提高了教学质量。(4)具有良好的扩展性,可以在短时间内添加新的图形算法函数,使程序更加全面。1.5系统开发环境(1) 硬件系统:笔记本(2) 操作系统:Windows XP或Win7 旗舰版操作系统(3) 开发环境:VC+6.02 系统的功能分析与总体设计2.1系统的功能需求分析2.1.1系统开发的内容计算机图形学基本图元生成系统研究的内容主要有:实现直线的生成、三角形生成、矩形的生成以

18、及椭圆和曲线的生成、Bezier曲线变换的生成过程,还可以改变线型和线宽及颜色。2.1.2系统需要实现的功能基本图形功能:指在屏幕中置点,绘制直线、三角形、椭圆、矩形、曲线以及文本,还有可以改变线型线宽和颜色等。文件功能:能够新建、打开、写入、读出、关闭、删除和退出程序。图形变换功能:拷贝、粘贴、平移、删除。图形的存储与输入和输出:以各种方式加以存储。放大缩小功能:能够通过菜单栏或工具栏实现图形的等比缩放的功能。2.2 总体设计计算机图形学基本图元生成系统流程图如图2.1所示:图2.1 系统总体设计结构图3 二维图形的基本生成3.1 概述本系统在对计算机图形学的算法可视化的时候,分别对二维图形

19、和三维图形运用了不同的方法来实现,因此本系统将把二维图形和三维图形的生成分开来讨论,本章主要探讨二维图形的生成方法,在下一章将探讨三维图形的生成方法。二维图形包括直线、三角形、椭圆、曲线、矩形、填充等,其中每种图形又包括不同的算法,比如,直线的常见算法有DDA算法、Bresenham算法、中点算法等。在数学中,所有的基本图形都是以点为最小单位按一定的规律组合而成的集合。为了将图形在计算机上显示出来,无意就是找出这种排列的规律,然后在显示器所给定的有限个像素组成的矩阵中确定逼近于该图形的最佳像素组,并且按一定的顺序对这些像素进行写操作。图形学生成算法的可视化就是在解读图形显示原理的基础上,通过创

20、建“虚拟栅格”来模仿计算机的“象素点”,结合图形生成的算法,计算出图形在虚拟栅格中的最佳逼近“象素点”,然后以画圆来代替这些“象素点”的方式显示图形。下面将对基本二维图形的生成原理逐一介绍和分析。3.2二维图形的生成原理分析3.2.1直线直线作为最简单的图形,是生成其它复杂图形的基础。直线是点的集合,在几何学中直线被定义为两个点之间的最短距离。也就是说一条直线是指所有在它上面的点的集合。直线可以向一个方向及其相反的方向无限延长,这不是计算机图形学中所需要的,在图形学中研究的对象是直线段。下面我们来研究直线上只存在于两个端点,和之间的任意点。例如,线段的起点坐标,终点坐标,这两个点就确定了这条线

21、段,并用线段上的任意一点均满足: 画一条直线实际上是根据一系列计算出来并与该线靠近的像素绘制的,当我们要在屏幕上显示一条直线时,只能在显示器所给定的有限个像素组成的矩阵中确定最佳逼近于该直线的一组像素,并且按扫描线顺序对这些像素进行写操作。这就是通常所说的用显示器绘制直线,或直线的扫描转换。直线的最常见的扫描转换方式有数值微分法(DDA算法),中点法和Bresenham算法。它们的算法原理在计算机图形学的很多书上都介绍的很清楚。3.2.2椭圆中心在原点、轴对齐的椭圆的非参数化方程为: (3.1)式3.1可用隐式方程表示为:由于椭圆的对称性,仅考虑在第一象限的椭圆弧即可。对隐函数求导可得,由于可

22、知椭圆在第一象限内单调递减,在区间内切线的斜率从0递减到。为了使生成的椭圆具有封闭性,以弧上斜率为-1的点作为分界,把椭圆弧分成上下两部分。上半部分满足即,的变化量大于的变化量,由从点开始递增步长来确定的值,下半部分满足即,的变化量大于的变化量,由从点开始递增步长来确定的值。由于这两部分是相互独立的,可用两个处理器(或线程)并行处理,而不用考虑同步问题,从而能最大化的提高并行效率,见图3.1。图3.1 第一象限的椭圆弧对于上半部分,假设已知点为则下一点在其右方点或右下方点中选择离椭圆弧最近的点,而为右方点到椭圆弧的距离, 为右下方点到椭圆弧的距离,通过做差:可判断出所要选择的点,即:选择右方的

23、点,选择右下方的点.根据所得到的利用上述思想推下一点即可得到与的递推关系式:根据递推关系式和已知点就可得到所有上半部分的点。对于下半部分,假设已知点为,则下一点在其上方点或左上方点中选择离椭圆弧最近的点,而为上方点到椭圆弧的距离, 为左上方点到椭圆弧的距离,通过做差:可判断出所要选择的点,即:选择上方的点,选择左上方的点。根据所得到的利用上述思想推下一点即可得到与的递推关系式:根据递推关系式和已知点(a,0)就可得到所有下半部分的点.通过上下部分拟合得到所有椭圆上的点。椭圆的扫描转换算法主要有DDA算法,中点算法,Bresnham算法以及正负步法和双步法。3.2.3曲线贝赛尔(Bezier)曲

24、线是有多项式调和函数推导出来的,通常n+1个顶点定义一个n次多项式。Bezier曲线的参数方程表示如下: (3.5)在式(3.5)中,表示特征多边形n+1个顶点的位置向量,是伯恩斯坦(Bernstein)多项式,称为基函数,也就是贝赛尔多边形的各顶点位置向量之间的调和函数。该函数的表达式为:Bezier曲线的缺点:(1) 特征多边形顶点个数决定了Bezier曲线阶次,并且当n较大时,特征多边形对曲线的控制将会减弱;(2) Bezier曲线不能作局部修改,即改变某一控制点的位置对整条曲线都有影响。曲线生成代码如下所示:void CTestView:DrawBezier()/绘制Bezier曲线C

25、DC *pDC=GetDC();CPen NewPen,*pOldPen;NewPen.CreatePen(PS_SOLID,1,RGB(0,0,255);/曲线颜色为蓝色pOldPen=pDC-SelectObject(&NewPen);pDC-MoveTo(P0);for(double t=0.0;t=1.0;t+=0.01)double x=0,y=0;for(int i=0;iLineTo(Round(x),Round(y);pDC-SelectObject(pOldPen);NewPen.DeleteObject();ReleaseDC(pDC);/释放DCdouble CTestV

26、iew:Cni(const int &n, const int &i)/Bernstein第一项组合return double(Fac(n)/(Fac(i)*Fac(n-i);long CTestView:Fac(int m)/阶乘函数long f;if(m=0|m=1)f=1;elsef=m*Fac(m-1);return f;void CTestView:DrawCtrlPolygon()/绘制控制多边形CDC *pDC=GetDC();CBrush NewBrush,*pOldBrush;pOldBrush=(CBrush*)pDC-SelectStockObject(GRAY_BRUS

27、H);/灰色实心圆绘制控制点for(int i=0;iMoveTo(Pi);pDC-Ellipse(Pi.x-2,Pi.y-2,Pi.x+2,Pi.y+2);elsepDC-LineTo(Pi);pDC-Ellipse(Pi.x-2,Pi.y-2,Pi.x+2,Pi.y+2);pDC-SelectObject(pOldBrush);ReleaseDC(pDC);void CTestView:OnLButtonDown(UINT nFlags, CPoint point)/获得屏幕控制点坐标 / TODO: Add your message handler code here and/or ca

28、ll defaultif(bFlag)PCtrlPointNum.x=point.x;PCtrlPointNum.y=point.y;if(CtrlPointNumm_hWnd; CDC* pDC=GetDC();CRect rect;/定义客户区GetClientRect(&rect);/获得客户区的大小pDC-SetMapMode(MM_ANISOTROPIC);/pDC自定义坐标系pDC-SetWindowExt(rect.Width(),rect.Height();/设置窗口范围pDC-SetViewportExt(rect.Width(),-rect.Height();/x轴水平向右

29、,y轴垂直向上pDC-SetViewportOrg(rect.Width()/2,rect.Height()/2);/屏幕中心为原点CDC MemDC;/内存DCCBitmap NewBitmap,*pOldBitmap;/内存中承载图像的临时位图MemDC.CreateCompatibleDC(pDC);/建立与屏幕pDC兼容的MemDC NewBitmap.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height();/创建兼容位图 pOldBitmap=MemDC.SelectObject(&NewBitmap); /将兼容位图选入MemDC

30、 MemDC.FillSolidRect(&rect,pDC-GetBkColor();/按原来背景填充客户区,否则是黑色 MemDC.SetMapMode(MM_ANISOTROPIC);/MemDC自定义坐标系MemDC.SetWindowExt(rect.Width(),rect.Height();MemDC.SetViewportExt(rect.Width(),-rect.Height();MemDC.SetViewportOrg(rect.Width()/2,rect.Height()/2);DrawCtrlPolygon(&MemDC);/绘制控制多边形SignCtrPoint(

31、&MemDC);/标注控制点编号DrawObject(&MemDC);/绘制Bezier曲面pDC-BitBlt(-rect.Width()/2,-rect.Height()/2,rect.Width(),rect.Height(),&MemDC,-rect.Width()/2,-rect.Height()/2,SRCCOPY);/将内存位图拷贝到屏幕MemDC.SelectObject(pOldBitmap);/恢复位图NewBitmap.DeleteObject();/删除位图ReleaseDC(pDC);/释放DCvoid CDrawBizerCurve:ReadPoint()/读入控制

32、多边形16个顶点坐标P300.x=20; P300.y=0; P300.z=200;/P00P301.x=0; P301.y=100;P301.z=150;/P01P302.x=-130;P302.y=100;P302.z=50; /P02P303.x=-250;P303.y=50; P303.z=0; /P03P310.x=100; P310.y=100;P310.z=150;/P10P311.x=30; P311.y=100;P311.z=100;/p11P312.x=-40; P312.y=100;P312.z=50; /p12P313.x=-110;P313.y=100;P313.z=

33、0; /p13P320.x=280; P320.y=90; P320.z=140;/P20P321.x=110; P321.y=120;P321.z=80; /P21P322.x=30; P322.y=130;P322.z=30; /P22P323.x=-100;P323.y=150;P323.z=-50;/P23P330.x=350; P330.y=30; P330.z=150;/P30P331.x=200; P331.y=150;P331.z=50; /P31P332.x=50; P332.y=200;P332.z=0; /P32P333.x=0; P333.y=100;P333.z=-7

34、0;/P33void CDrawBizerCurve:ObliqueProjection()/斜等测投影for(int i=0;i4;i+)for(int j=0;jSelectObject(&NewPen);for(int i=0;iMoveTo(Round(P2i0.x),Round(P2i0.y);for(int j=1;jLineTo(Round(P2ij.x),Round(P2ij.y);for(int j=0;jMoveTo(Round(P20j.x),Round(P20j.y);for(int i=1;iLineTo(Round(P2ij.x),Round(P2ij.y);pDC

35、-SelectObject(pOldPen);NewPen.DeleteObject();void CDrawBizerCurve:DrawObject(CDC *pDC)/绘制双三次Bezier曲面double x,y,u,v,u1,u2,u3,u4,v1,v2,v3,v4;double M44;M00=-1;M01=3; M02=-3;M03=1;M10=3; M11=-6;M12=3; M13=0;M20=-3;M21=3; M22=0; M23=0;M30=1; M31=0; M32=0; M33=0;LeftMultiMatrix(M,P3);/数字矩阵左乘三维点矩阵Transpos

36、eMatrix(M);/计算转置矩阵RightMultiMatrix(P3,MT);/数字矩阵右乘三维点矩阵ObliqueProjection();/轴侧投影for(u=0;u=1;u+=0.04)for(v=0;vMoveTo(Round(x),Round(y);elsepDC-LineTo(Round(x),Round(y); for(v=0;v=1;v+=0.04)for(u=0;uMoveTo(Round(x),Round(y);elsepDC-LineTo(Round(x),Round(y);void CDrawBizerCurve:LeftMultiMatrix(double M0

37、4, CP3 P04)/左乘矩阵M*PCP3 T44;/临时矩阵int i,j;for(i=0;i4;i+)for(j=0;j4;j+)Tij.x=M0i0*P00j.x+M0i1*P01j.x+M0i2*P02j.x+M0i3*P03j.x;Tij.y=M0i0*P00j.y+M0i1*P01j.y+M0i2*P02j.y+M0i3*P03j.y;Tij.z=M0i0*P00j.z+M0i1*P01j.z+M0i2*P02j.z+M0i3*P03j.z;for(i=0;i4;i+)for(j=0;j4;j+)/P3ij=Tij;P3ij.x =Tij.x;P3ij.y =Tij.y;P3ij

38、.z =Tij.z;void CDrawBizerCurve:RightMultiMatrix(CP3 P04, double M14)/右乘矩阵P*MCP3 T44;/临时矩阵int i,j;for(i=0;i4;i+)for(j=0;j4;j+)Tij.x=P0i0.x*M10j+P0i1.x*M11j+P0i2.x*M12j+P0i3.x*M13j;Tij.y=P0i0.y*M10j+P0i1.y*M11j+P0i2.y*M12j+P0i3.y*M13j;Tij.z=P0i0.z*M10j+P0i1.z*M11j+P0i2.z*M12j+P0i3.z*M13j;for(i=0;i4;i+

39、)for(j=0;jSetTextColor(RGB(0,0,255); for(int i=0;i4;i+)for(int j=0;jTextOut(Round(P2ij.x+10),Round(P2ij.y),str);void CDrawBizerCurve:TransposeMatrix(double M04)/转置矩阵for(int i=0;i4;i+)for(int j=0;j4;j+)MTji=M0ij;Bezier曲面以及其控制多边形的生成如图4.2所示。 图4.2 Bezier曲面以及其控制多边形5 系统与编码实现5.1系统的类本系统是在VC+ 6.0开发工具的环境下开发的,

40、作为可视化面向对象的编程工具,它具有很多优点和功能,不过缺点是掌握起来也比较困难。本系统的程序是在通过MFC建立的单文档的基础上编写的。它会帮我们自动生成程序的主框架,同时也会自动生成一些文档视图结构的类。在程序的编写过程中,我们主要编写了多个类和结构体,并且导入了别的类。其中最主要的类之间的层次关系如下图所示5.1所示。图5.1主要类之间的层次关系CMainFrame类,CGraphicsDemoView类以及CPainterView类是本程序中最重要的三个视图类,后面的类是系统自动添加的,前面两个类是自己写的。CMainFrame类对应主界面中的主体框架图(包括标题栏和状态栏等界面的控制),同时其它两个类由主类来调度和使用,后面两个类分别对应图形生成过程的图形算法演示视图。在CPainterView类中它主要调用的类有BRUSHTYPE类,CDRAWBEIZER类,CDrawBizerCurve类,这些类分别是用来为三维变换,多边形填充和为曲面可视化来服务的。在这些类和结构体中,前三个是在建立VC的单文档应用程序时自动生成的类,它们的主要作用是生成单文档程序。5.2类的实现本系统的实现实际上是通过许多函数来实现的,而函数是根据不同的功能而封装在不同的类中的,所以我们从不同的类

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!