




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 课程设计任务书 弹跳的彩球动画 题目: 课程设计任务书及成绩评定 课程设计的内容和具体要求 1设计内容: 弹跳的球体:一个着色的三维球体,沿着一条给定的轨道(正弦衰弱曲线)不断弹跳并同时翻滚,要求按ESC停止转动翻滚按加快弹跳速度,按减慢弹跳速度。 2设计要求: 球体在屏幕上不断地连续弹跳并同时翻滚,按加快移动速度,按减慢移动速度。 指导教师签字: 日期: 指导教师评语 成绩:指导教师签字: 日期: 1 课程设计所需软件、硬件等 Win-TC 课程设计进度计划起至日期 工作内容 备注 周第 15 星期二 星期三 星期六 星期日 确定题目及实现效果 理清思路及实现方法 编写程序 完成课程设计任
2、务书 确定题目为弹跳的球体 尽量完善程序,使界面 尽量美观 参考文献、资料索引序号 文献、资料名称 编著者 出版单位 清华大学出版社【1】陆润民计算机图形学教程 高等教育出版社潘云鹤,董金祥等 【2】计算机图形学原理、方法及应用 科学出版社 陈元琰 计算机图形学实用技术 3【】 2 目录 一、摘要 . 1 二、总体设计方案及主要设计原理 . 2 1功能实现 . 2 2流程图 . 2 21函数qiu的流程图 . 2 22绘制球体的程序流程图 . 2 23主程序流程图 . 4 3主要算法 . 4 三、源程序代码 . 5 四、测试及分析 . 10 五、结束语 . 11 3 一、摘要 本课题实现一个着
3、色的三维小球在一定的空间内按照一条给定的轨道(正弦衰弱曲线)不断弹跳并同时翻滚。控制键为按ESC退出程序,按“”键完成运动加速,使得三维小球加快弹跳速度;按“”键完成运动减速,使得三维小球减慢弹跳速度。并且小球在屏幕中连续不断的按照给定的曲线函数跳动,且三维小球自身也要进行翻滚。 该程序的主要模块分为如下部分: 操作控制部分:该部分主要是实现对屏幕的操作,达到功能要求中按“ESC”结束程序,按“”加快三维小球运动,按“”减慢三维小球的运动。 球体绘制部分:该部分实现三维小球的绘制,其具体的是对三维球体的形状、大小、经纬线、以及在三维球体中填充颜色。 球体运动轨迹控制部分:该部分是确定球体在屏幕
4、上的运动轨迹,从而达到程序要求的功能。通过该部分,我们可以任意的对球体的运动轨迹进行设定,使得三维小球的运动丰富多彩。 背景控制部分:通过该部分,我们可以设定三维小球在什么样的背景下运动,对颜色的组合,使得背景更加丰富,从而完善程序的运行界面,达到美观的作用。 1 二、总体设计方案及主要设计原理 1功能实现 通过运行程序,我们看到该程序的功能我们已经基本实现,当我们在三维小球在屏幕中按照预先给定的曲线函数路线进行运动,当我们从键盘输入“”时三维小球就加速运动。当我们从键盘输入“”时,椭球体减速运动,按下“ESC”键就退出程序,最终达到了功能要求的目的。 2流程图 21函数qiu的流程图 如图1
5、所示为函数qiu的流程图: 图1:函数qiu的流程图 22绘制球体的程序流程图 如图2、图3示为程序绘制球体的流程图: 2 1 :球体绘制程序流程图图2 2 3图:球体绘制程序流程图 3 23主程序流程图 图4:主程序流程图 3主要算法 可用绘制三维曲面(规则曲面、参数方程为:x=Rsin()cos(), y=Rsin()sin(), z=Rcos(),0180,0360)来设计球体的形状,用轴测图将它绘制到屏幕上,并对球面上的小方格进行填充,选择510个不同方位的球体图形用getimage()命令将它们的图象保存;对以后路径上的图形只需用命令Putimage()调出即可。其轨迹方程为: z=
6、A|sin(r+)|e-kr r=(x2+y2)1/2。 4 三、源程序代码 #includemath.h #includegraphics.h #includeios.h #includeconio.h #define ESC 283 #define PAGEUP 18688 #define PAGEDOWN 20736 double f44,xx,yy,zz,dd; double x04040,y04040,z04040; int x4040,y4040,z4040,this; int scx(double xj) int x; x=(int)(xj+40); return(x); int
7、 scy(double yj) int y; y=(int)(yj+60); return(y); void teq(double theta) double th; th=theta*3.14159/180; f00=0.87*cos(th); f01=0.0; f02=-0.35*cos(th)-0.71*sin(th); f03=0.0; f10=-0.5; f11=0.0; f12=-0.61; f13=0.0; f20=0.87*sin(th); f21=0.0; f22=-0.35*sin(th)+0.71*cos(th); f23=0.0; f30=0.0; f31=0.0; f
8、32=0.0; f33=1.0; double affine3x(double x,double y,double z,double d) xx=x*f00+y*f10+z*f20+d*f30; return(xx); double affine3z(double x,double y,double z,double d) 5 zz=x*f02+y*f12+z*f22+d*f32; return(zz); void draw() int i,j,m8,rt; setfillstyle(1,RED); for(i=9;i=0;i-) for(j=19;j=0;j-) if(j%2=1) setf
9、illstyle(1,RED); else setfillstyle(1,BLUE); m0=scx(x0ij);m1=scy(z0ij); m2=scx(x0i+1j);m3=scy(z0i+1j); m4=scx(x0i+1j+1);m5=scy(z0i+1j+1); m6=scx(x0ij+1);m7=scy(z0ij+1); fillpoly(4,m); void qiu() double a=0.0,b=0.0; int r=30; int i=0,j=0,th; for(i=0;i=10;i+) for(j=0;j=20;j+) xij=r*sin(a)*cos(b); yij=r
10、*sin(a)*sin(b); zij=r*cos(a); b=b+3.14159/10; a=a+3.14159/10; b=0; 6 qiu1(int th,int u,int v) int i,j; this=this+th; teq(this); for(i=0;i=15;i+) for(j=0;j=30;j+) x0ij=affine3x(xij,yij,zij,1.0)+u; z0ij=affine3z(xij,yij,zij,1.0)+v; draw(); main() int driver=VGA,mode=VGAMED; initgraph(&driver,&mode, );
11、 qiu2(); closegraph(); qiu2() int i=3,j=0,xw=0,yw=0,key,speed,dd=0,mm,xxw200,yyw200; int xp26=50,50,50,100,140,180,220,250,280,310,330,350,370,390,410,430,450,470,490,510,525,535,545,555,565; int yp26=0,0,0,200,50,50,200,100,100,200,150,150,200,170,170,200,180,180,200,200,200,200,200,200,200; int xa
12、,xb,xc,xd; int ya,yb,yc,yd; double t=0.5,tt=0.05; xa=xp0;xb=xp1;xc=xp2;xd=xp3; ya=yp0;yb=xp1;yc=yp2;yd=yp3; qiu(); outtextxy(100,100,Press any key to start!); qiu1(0,0,ya); getch(); for(j=0;i=1) xa=xpi;xb=xpi+1;xc=xpi+2;xd=xpi+3; ya=ypi;yb=ypi+1;yc=ypi+2;yd=ypi+3; t=0; i=i+3; xw=(-xa+3*xb-3*xc+xd)*t
13、*t*t+(3*xa-6*xb+3*xc)*t*t+(-3*xa+3*xb)*t+xa); yw=(-ya+3*yb-3*yc+yd)*t*t*t+(3*ya-6*yb+3*yc)*t*t+(-3*ya+3*yb)*t+ya); t=t+tt; xxwdd=xw+40; yywdd=yw+60; for(mm=0;mm=26) i=3; j=0; dd=0; t=0.5; xa=xp0;xb=xp1;xc=xp2;xd=xp3; ya=yp0;yb=yp1;yc=yp2;yd=yp3; cleardevice(); else setvisualpage(1); delay(10000); se
14、tactivepage(0); cleardevice(); setfillstyle(1,WHITE); bar(0,260,700,320); qiu1(-10,xw,yw); 8 if(t=1) xa=xpi;xb=xpi+1;xc=xpi+2;xd=xpi+3; ya=ypi;yb=ypi+1;yc=ypi+2;yd=ypi+3; t=0; i=i+3; xw=(-xa+3*xb-3*xc+xd)*t*t*t+(3*xa-6*xb+3*xc)*t*t+(-3*xa+3*xb)*t+xa); yw=(-ya+3*yb-3*yc+yd)*t*t*t+(3*ya-6*yb+3*yc)*t*t
15、+(-3*ya+3*yb)*t+ya); t=t+tt; xxwdd=xw+40; yywdd=yw+60; for(mm=0;mm=26) i=3; j=0; dd=0; t=0.5; xa=xp0;xb=xp1;xc=xp2;xd=xp3; ya=yp0;yb=yp1;yc=yp2;yd=yp3; cleardevice(); else key=bioskey(0); switch(key) case ESC:return; case PAGEUP:tt=tt*2; break; case PAGEDOWN:tt=tt/2; break; defualt:break; getch(); 9
16、 四、测试及分析 该程序是弹跳的小球,程序写完之后运行程序,会看到下面的界面: : 接着按照提示进行操作,就会出现弹跳的小球的最终效果,见下图 10 五、结束语 课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.通过本次图形学的课程设计,我学会了很多东西。以前那些似东非懂的知识,现在有很多已经掌握了,原来根本没听过的东西也明白了很多,而且使我对C语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处,如对C语言的一些标准库函数不太了解,通过实践,使我在这几个方面的认识有所提高。 通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。 图形学中二维图形处理的很重要的一块
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商户签约合同范本
- 冰箱仓储配送合同范例
- 单位食堂建设合同范本
- 新高考背景下铸就高品质高中化学课堂教学的策略探究
- 北师大版九年级(上)期末数学试卷及答案1
- 企业并购中协同效应价值评估研究
- 基于新高考背景下的高中语文教学策略
- 上门出租改造合同范本
- 小学高年级语文课堂教学中教师提问的有效性分析
- 大数据对公司财务管理的影响及对策研究-以证券公司营业部为例
- 2025届新高考数学冲刺复习 突破爪型三角形的八大妙手
- 《医德医风学习记录》
- 羊水穿刺的委托书
- 变电站工程的验收规范
- CJT183-2008 钢塑复合压力管
- 爆破飞石控制措施
- 2024年新疆生产建设兵团兴新职业技术学院单招职业适应性测试题库必考题
- (高清版)JTGT M72-01-2017 公路隧道养护工程预算定额
- DZ∕T 0130.6-2006 地质矿产实验室测试质量管理规范 第6部分:水样分析(正式版)
- 2024年辽宁生态工程职业学院单招职业适应性测试题库一套
- 摩托车科目一题库-共400题(附答案)
评论
0/150
提交评论