《图形学-弹跳的球体.doc》由会员分享,可在线阅读,更多相关《图形学-弹跳的球体.doc(11页珍藏版)》请在三一办公上搜索。
1、精选优质文档-倾情为你奉上一、设计内容与设计要求1设计内容:弹跳的球体:一个着色的三维球体,沿着一条给定的轨道(正弦衰弱曲线)不断弹跳并同时翻滚,要求按ESC停止转动翻滚按加快弹跳速度,按减慢弹跳速度。2设计要求:在屏幕上不断地连续弹跳并同时翻滚,按加快移动速度,按减慢移动速度。3.算法提示:可用绘制三维曲面(规则曲面、参数方程为:x=Rsin()cos(), y=Rsin()sin(), z=Rcos(),0180,0360)来设计球体的形状,用轴测图将它绘制到屏幕上,并对球面上的小方格进行填充,选择510个不同方位的球体图形用getimage()命令将它们的图象保存;对以后路径上的图形只需
2、用命令Putimage()调出即可。其轨迹方程为: z=A|sin(r+)|e-kr r=(x2+y2)1/2。二、进度安排第 3 周 星期一 8:0012:00星期二 8:0012:00 星期三 8:0012:00 星期四 8:0012:00 星期五 8:0012:00第 4 周 星期一 8:0012:00目录专心-专注-专业一、课题的主要功能本课题实现了一个着色的三维球体,沿着一条给定的轨道(正弦衰弱曲线)不断弹跳,控制键为W键和X键,按W键使运动加速,按X键使运动减速。并且着色球体在屏幕上连续不断的按照给定的曲线函数跳动,且三维球体自身也要进行翻滚。二、课题的功能模块的划分跳动的球体ke
3、yboard(int )convey(void)sphere(float,float,float)该程序主要分为三个部分:1、键盘控制部分:该部分主要是实现对键盘控制的操作,按W键加快三维球体的运动速度,按X键能减慢球体的运动速度。2、球体运动轨迹设计部分:主要是确定球体在屏幕上的运动轨迹。3、球体绘制部分:该部分主要是绘制一个着色的三维球体,并控制其自身翻滚所沿其经纬度设定。三、主要功能的实现1、功能实现该程序的主要功能我已基本实现,三维球体在屏幕上按照程序给定的正弦衰弱曲线轨道进行跳动并翻转,通过球体经纬度和球体绿色部分的旋转就可以看出来。当我们从键盘上输入W时球体就会加快运动,并显出字符
4、PAGEUP;当我们从键盘上输入X时球体就会减慢运动,并显出字符PAGEDOWN。2、流程图键盘控制部分:kbhit()ch=getch() Y ch W X Nspeed=1000-t2*50speed=1000+t4*100Sleep(speed)四、程序调试五、总结为了这个程序,我真的发了很多心思,其中有很多问题是我不会的,我需要花时间去学习和编程,中间会出现问题,比如在怎样在二维平面上绘制三维球体、球体颜色的填充、球体自身的翻滚等,如果想认真完成这次课设,这些是需要我一步一步解决的。实际上,在弄懂了程序功能原理的基础上,我们的时间是充余的,做一个粗糙的程序体出来应该是游刃有余的,如果说
5、创新对于我们来说是件难事,那改良总是有可能的。就像这次我做这个课设时,为了解决问题我仔细的研究老师给的那几个参考例子,并且也借鉴了书上的一些功能函数。对于课程设计,总的一句话就是要动手,只有自己动手了,书本是那个学的知识才能融会贯通,才能应用与实际。这个程序所需要的一些基本功能我已经实现啦,但是做工还是有点粗糙,因为自己的能力水平也有限,而且时间有限,我就只能做到这样啦。 到了大四,可以说经过了无数次实验和课设,给我最深的回忆是每次自己独立写出程序的那种快感,这种感觉是不编程人无法体会的,我很庆幸过了四年我这点还没有丢失掉,或许这是我这大学四年留下的最美好的回忆。六、附件#include st
6、dio.h#include conio.h#include /*图形系统头文件*/#include/#include#include windows.h#define PI 3.14159long int speed=1000;int A=50;float w=0.2;static double yy=0.0,xx=0.0;char ch;void convey() /*轨迹方程函数*/ xx=xx+10.0; yy=200-A*sin(w*xx); if(xx=500&yy=400) xx=10.0;yy=0.0; /*设置球体运动的最大坐标*/ return; void quittime0
7、1(int t2) /*按w键加速球体运动*/ printf(PAGEUPn); speed=1000-t2*50; Sleep(speed); return; void quittime02(int t4) /*按x键减速球体运动*/ printf(PAGEDOWNn);speed=1000+t4*100; Sleep(speed); return; void keyboard(int t1) /*定义判断是否按键控制速度函数*/ if(kbhit() /*判断是否按键*/ ch=getch(); switch(ch) case w: quittime01(t1); /*调用quittime
8、01()函数*/ return; case x: quittime02(t1); return; default:break; else Sleep(speed);return; void sphere(float R,int alfa,int beta) /*R为球体半径,alfa、beta分别为半径与经纬线的夹角*/ float x4,y4,z4; /*定义旋转变换前点坐标数组*/ float x14,z14; /*定义旋转变换后点坐标数组*/ int i,j,k; float sx4,sy4; int shfill10; /*定义存放了5个顶点坐标序列的数组*/ double yn; d
9、ouble a1,a2,b1,b2,c,d; c=alfa*PI/180.0; /*每次旋转的角度*/ d=beta*PI/180.0; cleardevice(); for(j=0;j180;j=j+20) a1=j*PI/180.0; a2=(j+20)*PI/180.0; for(i=0;i360;i=i+20) b1=i*PI/180; b2=(i+20)*PI/180; x0=R*sin(a1)*cos(b1); /*求出图形旋转前点的坐标*/ y0=R*sin(a1)*sin(b1); z0=R*cos(a1); x1=R*sin(a2)*cos(b1); y1=R*sin(a2)
10、*sin(b1); z1=R*cos(a2); x2=R*sin(a2)*cos(b2); y2=R*sin(a2)*sin(b2); z2=R*cos(a2); x3=R*sin(a1)*cos(b2); y3=R*sin(a1)*sin(b2); z3=R*cos(a1); for(k=0;k=0.0) /*对可见部分进行画线,实现消隐*/ moveto(sx0,sy0); lineto(sx1,sy1); lineto(sx2,sy2); lineto(sx3,sy3); lineto(sx0,sy0); shfill0=(int)sx0,shfill1=(int)sy0; shfill
11、2=(int)sx1,shfill3=(int)sy1; shfill4=(int)sx2,shfill5=(int)sy2; shfill6=(int)sx3,shfill7=(int)sy3; shfill8=(int)sx0,shfill9=(int)sy0; if(i=20) /*对一段经曲面进行填充*/ setfillstyle(1,GREEN); else setfillstyle(1,RED); fillpoly(5,shfill); /*用当前颜色填充多边形*/ void main() int gdrive=DETECT,gmode,t; initgraph(&gdrive,&
12、gmode,); /*初始化图形系统*/ cleardevice(); setcolor(WHITE); /*设置当前画笔颜色为白色*/ sphere(50,80,30); /调用sphere函数 outtextxy(400,20,Press any key to start!);getch(); for(t=0;t=45;t+) cleardevice(); sphere(50,t*10,0); keyboard(t); convey(); getch(); closegraph(); /*关闭图形系统*/计算机与通信学院课程设计评分表课题名称: 弹跳的球体 项 目评 价设计方案的合理性与创造性设计与调试结果设计说明书的质量答辩陈述与回答问题情况课程设计周表现情况综合成绩 教师签名: 日 期: