图形学弹跳的球体.docx
- 文档编号:30070073
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:11
- 大小:118.68KB
图形学弹跳的球体.docx
《图形学弹跳的球体.docx》由会员分享,可在线阅读,更多相关《图形学弹跳的球体.docx(11页珍藏版)》请在冰豆网上搜索。
图形学弹跳的球体
一、设计内容与设计要求
1.设计内容:
弹跳的球体:
一个着色的三维球体,沿着一条给定的轨道(正弦衰弱曲线)不断弹跳并同时翻滚,要求按ESC停止转动翻滚按↑加快弹跳速度,按↓减慢弹跳速度。
2.设计要求:
在屏幕上不断地连续弹跳并同时翻滚,按↑加快移动速度,按↓减慢移动速度。
3.算法提示:
可用绘制三维曲面(规则曲面、参数方程为:
x=Rsin(α)cos(β),y=Rsin(α)sin(β),z=Rcos(α),0≤α≤180,0≤β≤360)来设计球体的形状,用轴测图将它绘制到屏幕上,并对球面上的小方格进行填充,选择5—10个不同方位的球体图形用getimage()命令将它们的图象保存;对以后路径上的图形只需用命令Putimage()调出即可。
其轨迹方程为:
z=A|sin(ωr+θ)|e-krr=(x2+y2)1/2。
二、进度安排
第3周星期一8:
00——12:
00
星期二8:
00——12:
00
星期三8:
00——12:
00
星期四8:
00——12:
00
星期五8:
00——12:
00
第4周星期一8:
00——12:
00
一、课题的主要功能
本课题实现了一个着色的三维球体,沿着一条给定的轨道(正弦衰弱曲线)不断弹跳,控制键为W键和X键,按W键使运动加速,按X键使运动减速。
并且着色球体在屏幕上连续不断的按照给定的曲线函数跳动,且三维球体自身也要进行翻滚。
二、课题的功能模块的划分
该程序主要分为三个部分:
1、键盘控制部分:
该部分主要是实现对键盘控制的操作,按W键加快三维球体的运动速度,按X键能减慢球体的运动速度。
2、球体运动轨迹设计部分:
主要是确定球体在屏幕上的运动轨迹。
3、球体绘制部分:
该部分主要是绘制一个着色的三维球体,并控制其自身翻滚所沿其经纬度设定。
三、主要功能的实现
1、功能实现
该程序的主要功能我已基本实现,三维球体在屏幕上按照程序给定的正弦衰弱曲线轨道进行跳动并翻转,通过球体经纬度和球体绿色部分的旋转就可以看出来。
当我们从键盘上输入‘W’时球体就会加快运动,并显出字符‘PAGEUP’;当我们从键盘上输入‘X’时球体就会减慢运动,并显出字符‘PAGEDOWN’。
2、流程图
键盘控制部分:
Y
WX
N
四、程序调试
五、总结
为了这个程序,我真的发了很多心思,其中有很多问题是我不会的,我需要花时间去学习和编程,中间会出现问题,比如在怎样在二维平面上绘制三维球体、球体颜色的填充、球体自身的翻滚等,如果想认真完成这次课设,这些是需要我一步一步解决的。
实际上,在弄懂了程序功能原理的基础上,我们的时间是充余的,做一个粗糙的程序体出来应该是游刃有余的,如果说创新对于我们来说是件难事,那改良总是有可能的。
就像这次我做这个课设时,为了解决问题我仔细的研究老师给的那几个参考例子,并且也借鉴了书上的一些功能函数。
对于课程设计,总的一句话就是要动手,只有自己动手了,书本是那个学的知识才能融会贯通,才能应用与实际。
这个程序所需要的一些基本功能我已经实现啦,但是做工还是有点粗糙,因为自己的能力水平也有限,而且时间有限,我就只能做到这样啦。
到了大四,可以说经过了无数次实验和课设,给我最深的回忆是每次自己独立写出程序的那种快感,这种感觉是不编程人无法体会的,我很庆幸过了四年我这点还没有丢失掉,或许这是我这大学四年留下的最美好的回忆。
六、附件
#include"stdio.h"
#include"conio.h"
#include
#include
#include
#include"windows.h"
#definePI3.14159
longintspeed=1000;
intA=50;
floatw=0.2;
staticdoubleyy=0.0,xx=0.0;
charch;
voidconvey()/*轨迹方程函数*/
{xx=xx+10.0;
yy=200-A*sin(w*xx);
if(xx>=500&&yy>=400){xx=10.0;yy=0.0;}/*设置球体运动的最大坐标*/
return;
}
voidquittime01(intt2)/*按w键加速球体运动*/
{
printf("PAGEUP\n");
speed=1000-t2*50;
Sleep(speed);
return;
}
voidquittime02(intt4)/*按x键减速球体运动*/
{
printf("PAGEDOWN\n");
speed=1000+t4*100;
Sleep(speed);
return;
}
voidkeyboard(intt1)/*定义判断是否按键控制速度函数*/
{
if(kbhit())/*判断是否按键*/
{
ch=getch();
switch(ch)
{
case'w':
{
quittime01(t1);/*调用quittime01()函数*/
return;}
case'x':
{
quittime02(t1);
return;}
default:
break;
}
}
else
{Sleep(speed);return;}
}
voidsphere(floatR,intalfa,intbeta)
{/*R为球体半径,alfa、beta分别为半径与经纬线的夹角*/
floatx[4],y[4],z[4];/*定义旋转变换前点坐标数组*/
floatx1[4],z1[4];/*定义旋转变换后点坐标数组*/
inti,j,k;
floatsx[4],sy[4];
intshfill[10];/*定义存放了5个顶点坐标序列的数组*/
doubleyn;
doublea1,a2,b1,b2,c,d;
c=alfa*PI/180.0;/*每次旋转的角度*/
d=beta*PI/180.0;
cleardevice();
for(j=0;j<180;j=j+20)
{
a1=j*PI/180.0;
a2=(j+20)*PI/180.0;
for(i=0;i<360;i=i+20)
{
b1=i*PI/180;
b2=(i+20)*PI/180;
x[0]=R*sin(a1)*cos(b1);/*求出图形旋转前点的坐标*/
y[0]=R*sin(a1)*sin(b1);
z[0]=R*cos(a1);
x[1]=R*sin(a2)*cos(b1);
y[1]=R*sin(a2)*sin(b1);
z[1]=R*cos(a2);
x[2]=R*sin(a2)*cos(b2);
y[2]=R*sin(a2)*sin(b2);
z[2]=R*cos(a2);
x[3]=R*sin(a1)*cos(b2);
y[3]=R*sin(a1)*sin(b2);
z[3]=R*cos(a1);
for(k=0;k<4;k++)/*求出图形旋转后点的坐标*/
{
x1[k]=x[k]*cos(c)-y[k]*sin(c);
z1[k]=-x[k]*sin(c)*sin(d)-y[k]*cos(c)*sin(d)+z[k]*cos(d);
sx[k]=100-x1[k]+xx;/*将三维坐标转化为屏幕坐标*/
sy[k]=100-z1[k]+yy;
}
yn=-(x1[2]-x1[0])*(z1[3]-z1[1])+(x1[3]-x1[1])*(z1[2]-z1[0]);
if(yn>=0.0)/*对可见部分进行画线,实现消隐*/
{
moveto(sx[0],sy[0]);
lineto(sx[1],sy[1]);
lineto(sx[2],sy[2]);
lineto(sx[3],sy[3]);
lineto(sx[0],sy[0]);
shfill[0]=(int)sx[0],shfill[1]=(int)sy[0];
shfill[2]=(int)sx[1],shfill[3]=(int)sy[1];
shfill[4]=(int)sx[2],shfill[5]=(int)sy[2];
shfill[6]=(int)sx[3],shfill[7]=(int)sy[3];
shfill[8]=(int)sx[0],shfill[9]=(int)sy[0];
if(i==20)/*对一段经曲面进行填充*/
{setfillstyle(1,GREEN);}
else
setfillstyle(1,RED);
fillpoly(5,shfill);/*用当前颜色填充多边形*/
}
}
}
}
voidmain()
{
intgdrive=DETECT,gmode,t;
initgraph(&gdrive,&gmode,"");/*初始化图形系统*/
cleardevice();
setcolor(WHITE);/*设置当前画笔颜色为白色*/
sphere(50,80,30);//调用sphere函数
outtextxy(400,20,"Pressanykeytostart!
");
getch();
for(t=0;t<=45;t++)
{cleardevice();
sphere(50,t*10,0);
keyboard(t);
convey();
}
getch();
closegraph();/*关闭图形系统*/
}
计算机与通信学院课程设计评分表
课题名称:
弹跳的球体
项目
评价
设计方案的合理性与创造性
设计与调试结果
设计说明书的质量
答辩陈述与回答问题情况
课程设计周表现情况
综合成绩
教师签名:
日期:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图形学 弹跳 球体