《高级语言程序设计》课程设计报告(算法实例)_第1页
《高级语言程序设计》课程设计报告(算法实例)_第2页
《高级语言程序设计》课程设计报告(算法实例)_第3页
《高级语言程序设计》课程设计报告(算法实例)_第4页
《高级语言程序设计》课程设计报告(算法实例)_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

学号2011-2012学年 第二学期0808210125数据结构与算法设计课程设计报告题目:图形变换算法设计专业:计算机科学与技术班级:08级(2)班姓名:汤培霞指导教师: 陈广宏成绩:计算机与信息工程系2012 年 6月 10 日目 录1. 课程设计内容11.1平移变换算法的设计应用11.2比例缩放算法的设计应用11.3旋转变换算法的设计应用12课程设计原理及分析22.1图形变换算法原理22.2原理结构图介绍52.2.1各种算法的基本数据模型52.2.2算法的程序流程图53设计过程或程序代码83.1主要程序代码及解释84设计结果与分析114.1程序运行结果分析114.2程序运行结果截图12参考文献155总结115图形变换算法设计报告1. 课程设计内容本次课程设计的内容是运用图形变换的算法实现图形的平移、比例缩放以及图形旋转的效果,所以要了解掌握图形平移变换算法、图形比例变换算法和图形旋转变化算法的变换的原理。利用这些算法原理设计出能够体现这些变换的图形变换效果,通过编程实现,利用平行实现八面体的空间位置的转移,利用缩放比列算法来实现图形的放大缩小效果以及利用旋转算法原理来实现立方体的旋转。以下是这三个算法设计的实例应用。1.1 平移变换算法的设计应用本例设计的是通过x轴,y轴的平移改变所画八面体的位置,使得所画八面体在空间中在同一方位。1.2 比例缩放算法的设计应用本例设计的是一个具有动画效果的缩放四边形,通过x轴,y轴,z轴值得改变大小,配合使用opengl中的glutIdlefunc()函数来实现四边形的缩放动画效果。1.3 旋转变换算法的设计应用本例设计是设计一个正在旋转中的彩色立方体。通过鼠标来控制正方体的旋转方向,通过单击可以分别以X轴、Y轴、Z轴来旋转,来展现其立体效果。1图形变换算法设计报告2 课程设计原理及分析2.1 图形变换算法原理1、本几何变换: 假设表示三维空间上一个未被变换的点,而该点经过某种变换后得到新的点用表示。1 平移变换: 如果点是由点在x轴,y轴和z轴分别移动、距离得到的,则两点坐标关系为: 则矢量形式为: 其中 , , 2 缩放变换: 缩放变换改变物体的大小。有坐标关系 其中,分别为沿x,y和z轴方向放大或缩小的比例。得到矩阵形式为 转变换:设给定点P的坐标为,则它绕z轴旋转角后得到有 有矩阵形式 同理可得其他两个关于坐标轴的变换矩阵绕x轴 绕y轴 2、坐标下的几何变换:(1) 齐次坐标 为了使各种变换的表示形式一致,从而使变换合成更容易,引入了齐次坐标的概念。所谓齐次坐标表示就是用n+1维向量表示n维向量。利用齐次坐标,得到平移变换的矩阵形式: 缩放变换的矩阵形式: 旋转变换的矩阵形式: 绕x轴: 绕y轴: 绕z轴: paYXZZ2.2 原理结构图介绍2.2.1 各种算法的基本数据模型2.2.2 算法的程序流程图1.平移八面体 这个是平移八面体的主要流程图:2.比例缩放四边形 这个是比例缩放四边形的流程图:3.旋转立方体3 设计过程或程序代码3.1 主要程序代码及解释1、平移正八面体void display (void) glClear(GL_COLOR_BUFFER_BIT);glMatrixMode(GL_MODELVIEW);glLoadIdentity();/第一个正八面体 glTranslatef(-2.0,-3.5,-10.0);glColor3f(1.0,1.0,0.0);glutWireOctahedron();/第二个正八面体(在第一个的基础上进行了x轴和Y轴的平移) glPushMatrix();glTranslatef(2.0,0.0,-5.0);glColor3f(1.0,0.0,0.0);glutWireOctahedron();/第三个是正八面体(在第一个上进行变换,因为用了glPopMatrix)glPopMatrix();glPushMatrix();glTranslatef(4.0,3.0,-5.0);glColor3f(0.0,1.0,0.0);glutWireOctahedron(); /第四个正八面体(在第三个的基础上进行的平移和变换) glPushMatrix();glTranslatef(2.0,3.0,-0.0);glColor3f(0.0,0.0,1.0);glutWireOctahedron(); glFlush();本程序应用了opengl中的glutWireOctahedron()函数来画正八面体,在第一个的基础上,通过平移变换得到平移的效果,使用了平移变换函数 void glTranslateffd, (type x, type y,type z)来实现图形的移动变换,三个参数分别沿三个轴向平移的偏移量。这个函数表示用于这三个偏移量生成的矩阵乘以当前矩阵。2、比例缩放的四边行glBegin(GL_POLYGON);glVertex3f(x*2.0,y*2.0,z*2.0);glVertex3f(-y*2.0,x*2.0,z*2.0);glVertex3f(-x*2.0,-y*2.0,z*2.0);glVertex3f(y*2.0,-x*2.0,z*2.0);glEnd();X,Y,Z通过取不同的值,利用如上的程序画八个不同大小的四边形,产生比例的变化。void idle(void) if(dz0 & z0 & z=-0.6) dz=-dz;z+=dz;theta=(theta360.0) thetaaxis-=360.0;glutPostRedisplay();void mouse(int btn,int state,int x,int y)/鼠标事件if(btn=GLUT_LEFT_BUTTON & state=GLUT_DOWN) axis=0;if(btn=GLUT_MIDDLE_BUTTON & state=GLUT_DOWN) axis=1;if(btn=GLUT_RIGHT_BUTTON & state=GLUT_DOWN) axis=2;void myReshape(int w,int h)glViewport(0,0,w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();if(w=h) glOrtho(-2.0,2.0,-2.0*(GLfloat)h/(GLfloat)w,2.0*(GLfloat)h/(GLfloat)w,-10.0,10.0);else glOrtho(-2.0*(GLfloat)w/(GLfloat)h,2.0*(GLfloat)w/(GLfloat)h,-2.0,2.0,-10.0,10.0);glMatrixMode(GL_MODELVIEW);int main(int argc,char *argv) glutInit(&argc,argv);glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);glutInitWindowSize(500,500);glutCreateWindow(colorcube);glutDisplayFunc(display);glutReshapeFunc(myReshape);glutIdleFunc(spincube);glutMouseFunc(mouse);glEnable(GL_DEPTH_TESlT);glutMainLoop();return 0;本程序中使用void polygon()定义八个面的颜色,使用void colorcube()函数来设置彩色立方体,使用glRotatef(theta,type x, type y, type z) 函数中第一个参数旋转的角度,后三个参数是旋转的方向坐标。然后编写void spincube()来实现旋转角度的转变,即旋转事件。然后编写void mouse(int btn,int state,int x,int y)鼠标事件来实现鼠标事件。4 设计结果与分析4.1 程序运行结果分析1、平移算法程序的运行结果分析单击运行,生成四个八面体(颜色分别为黄、红、绿、蓝)通过使用opengl中的glutWireOctahedron()函数来画八的正八面体,使用opengl中的glTranslatef(0.0,0.0,0.0)函数来实现位置的移动,达到如运行结果所示的效果。2、比例缩放算法程序的运行结果分析 单击运行,生成一个使用比例算法结合opengl中的glutIdlefunc()形成动态的四边形动态效果图,对于不同大小的四边形也使用glColorf(0,0,0)通过设置不同的参数赋予了每个四边形不同的颜色。3、旋转算法程序的运行结果分析 单击运行,生成一个旋转中的彩色立方体,旋转的方向是通过鼠标来控制的,点击一下改变一下旋转的方向,分别为X轴、Y轴、Z轴的方向旋转,使用opengl中的glRotatef(thetaa,x,y,z)函数来实现真正的旋转功能。4.2 程序运行结果截图1、 平移八面体运行结果图说明:图1是平移八面体得到的运行结果图(图1)2、 比例缩放运行结果图 说明:本例中应用了opengl中的glutIdleFunc()函数形成了动画效果。具体的演变效果图如下图2.2所示:(图2.1) (图2.2)3、 旋转变换运行结果图说明:图3是旋转中的立方体,运行时是动态的效果,可以通过鼠标单击来控制立方体旋转的方向。可以沿X轴,Y轴和Z轴分别旋转。( 图3)参考文献1张彩明等编著.计算机图形学简明教程.北京:高等教育出版社,2006.7(201重印)2成思源等编著.计算机图形学.北京:冶金工业出版社,2003.83向世民等编著.OpenGl 编程与实例.北京:电子工业出版社。1999.94和青芳.算机图形学原理及算法教程.华大学出版社5穆克赫尔吉.贾纳著.计算机图形学算法与实现.清华大学出版社5 总结通过本次课程设计使我更加清楚了自己的水平以及自己多方面的不足。本次课程设计涉及到的范围很广,让本人能够比较系统的对C+语言和数opengl语言进行一次整理和复习。以及算法的设计思想,同时有了很多的体会和经验。学会了如何进行封装,构建各种算法的基本数据模型。本次课程设计让我出现的问题有:首先要弄懂几种图形变换算法的原理,要去查询相关的材料弄懂。其次,根据需求编程实现算法的功能,这一过程是非常重要的。经过调试经常会出现语法上的错误或者缺少头文件什么的,需要认真的去调试分析错误,纠正错误。然后,就是在根据程序来画流程图,起初不熟悉,画的很差,后来发现这其实是件简单易行的事情。再者就是对运行的结果进行封装了。一开始是一头雾水不知道该如何进行封装,上网查询后,下了一款叫EasyX_2011的一款软件,轻轻松松的进行了封装。通过

温馨提示

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

评论

0/150

提交评论