Cpp大作业文档格式.docx
- 文档编号:15119203
- 上传时间:2022-10-27
- 格式:DOCX
- 页数:11
- 大小:205.51KB
Cpp大作业文档格式.docx
《Cpp大作业文档格式.docx》由会员分享,可在线阅读,更多相关《Cpp大作业文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
一、课题介绍,小组分工情况
1.1课题介绍:
经过小组讨论,我们决定做一个与学习生活比较贴切的easyx程序,使其具有一定的实际意义。
最初的设想是做出太阳系中行星围绕太阳作椭圆轨迹运动,在之后的设计过程中,加上了月球绕地球的椭圆轨迹运动,之后又加上了闪烁的星空背景,最后将由easyx画出的太阳、行星和月球用XX上找到的太阳、行星和月球图片替换,得到了最终的太阳系行星运动模型。
总之,我们从实际出发,通过查阅相关书籍、XX资料及小组成员详尽讨论,解决了一系列问题,在这一过程中培养了我们团结协作意识,提高了我们观察并解决实际问题的能力。
1.2、小组分工:
课题的选择经过了小组成员的认真讨论,我们经过仔细的思考与讨论确定了明确的方向与设计思路,最初的设计思路是在我们小组三人的共同努力下完成并在之后的编程过程中完善的。
XXX:
主要负责收集相关行星运动资料并实现行星围绕太阳的椭圆轨迹运动,添加卫星并修正各函数。
在程序中添加闪烁星空背景,实现程序调试并修正各函数,进行总结、交流经验,完善文档。
推导行星轨道方程,建立数学模型,收集并适当修改太阳和行星、月球的图片,用图片替换之前用easyx画出的图片,修正各函数。
二、任务需求分析报告
2.1、任务概述:
完成课程设计,并使其有一定的使用价值。
在最初确定的思路引导下,小组成员各司其职,完成各自的任务,确保课程设计在规定的时间内完成。
完成程序的调试与测试工作,尽量保证程序不存在逻辑错误。
后期主要完善程序与美化程序,改善程序不太符合实际用处的地方。
最终,使课程设计在小组成员总能力范围之内做到最好。
2.2、目标:
尽量保证程序不存在逻辑错误,确保模型的正确展现,尽可能做到模拟实际。
程序界面美观清晰,具有一定的用户友好性。
2.3、用户:
由于从实际的学习生活出发,该项课程设计所面向的用户是全体初中高中学生及老师,有利于使学生在学习物理天体运动章节时对天体运有更为直观的认识。
程序简单实用,便于掌握,有一定的使用价值。
三、程序算法与关键技术
3.1、算法思想:
该程序为了实现行星围绕太阳的椭圆轨迹运动,各个函数(除了美化界面函数)都为了实现这一目的而设置。
3.2、关键技术:
这一部分主要分三个部分:
其一:
我们知道,行星在近日点运动快,在远日点运动慢。
因此定义了类classSolar来说明太阳系中各行星的各个与运动轨迹有关的数据,用数组floata[8];
floate[8];
floatt[8];
floatr[8];
floatx[8];
floaty[8];
来分别说明公转轨道的半长轴、偏心率、周期、行星半径、在某处时的横纵坐标,定义了voidSun()函数来画太阳,在for(inti=0;
i<
8;
i++)循环中实现沿椭圆轨迹画行星,且行星中心坐标是与时间有关的函数(A=2*PI*c/t[j]+PI*j/63;
m=a[j]*(1-e[j]*e[j]);
n=1+e[j]*cos(A);
x[j]=m*cos(A)/n;
y[j]=m*sin(A)/n;
)。
这样就实现了在远地点慢而在近地点快的运动特点。
其二:
实现闪烁的星空背景。
我们先用#defineMAXSTAR20000定义了星星总数,并定义了STARstar[MAXSTAR]和voidInitStar(inti)函数来初始化星星,定义voidMoveStar(inti)来确定星星的亮度,并使用对称的方法来画星星,同时用坐标(加一或减一)实现将星星变大,使用srand((unsigned)time(NULL))随机产生星星。
其三:
插入太阳及各行星、月球图片。
先将图片存入E盘或固定在文件夹中,然后调用如loadimage(&
img,"
E:
\\x\\1.jpg"
);
x[j]-=9;
y[j]-=8;
的语句实现图片的插入。
3.3、文件操作:
对从XX收集的图片进行修改在这里就不做说明了。
四、程序功能设计说明
本程序设计简单,主要目的是将太阳系中行星绕椭圆轨道运动直观地表现出来,便于老师讲解或者学生理解。
五、程序代码
#include<
graphics.h>
conio.h>
math.h>
time.h>
#definePI3.14159
#defineMAXSTAR20000//星星总数
#pragmacomment(lib,"
MSIMG32.LIB"
)
structSTAR
{
doublex;
inty;
doublestep;
intcolor;
};
STARstar[MAXSTAR];
voidInitStar(inti)//初始化星星
star[i].x=0;
star[i].y=rand()%800;
star[i].step=((rand()%5000)/1000.0+1)*100000000;
star[i].color=(int)(star[i].step*255/6.0+10);
star[i].color=RGB(star[i].color,star[i].color,star[i].color);
}
voidMoveStar(inti)
if(star[i].x>
1360)InitStar(i);
putpixel(pow(-1,i)*(int)star[i].x,pow(-1,i)*star[i].y,star[i].color);
//画新星星
putpixel(pow(-1,i)*(int)star[i].x,pow(-1,i+1)*star[i].y,star[i].color);
putpixel(pow(-1,i)*(int)star[i].x+1,pow(-1,i)*star[i].y,star[i].color);
putpixel(pow(-1,i)*(int)star[i].x+1,pow(-1,i+1)*star[i].y,star[i].color);
putpixel(pow(-1,i)*(int)star[i].x,pow(-1,i)*star[i].y+1,star[i].color);
putpixel(pow(-1,i)*(int)star[i].x,pow(-1,i+1)*star[i].y+1,star[i].color);
putpixel(pow(-1,i)*(int)star[i].x-1,pow(-1,i)*star[i].y,star[i].color);
putpixel(pow(-1,i)*(int)star[i].x-1,pow(-1,i+1)*star[i].y,star[i].color);
putpixel(pow(-1,i)*(int)star[i].x,pow(-1,i)*star[i].y-1,star[i].color);
putpixel(pow(-1,i)*(int)star[i].x,pow(-1,i+1)*star[i].y-1,star[i].color);
classSolar{
floata[8];
//公转轨道的半长轴
floate[8];
//轨道的偏心率
floatt[8];
//公转周期
floatr[8];
//行星半径
floatx[8];
//在某处时的横坐标
floaty[8];
//在某处时的纵坐标
public:
Solar(floata1[8],floate1[8],floatt1[8],floatr1[8])
{
for(inti=0;
i++)
{
a[i]=a1[i];
e[i]=e1[i];
t[i]=t1[i];
r[i]=r1[i];
}
}
voidSun()
floatm=0;
m=a[0]*e[0];
IMAGEimg;
loadimage(&
\\x\\0.jpg"
putimage(-m-60,-39,&
img);
voidXx()
srand((unsigned)time(NULL));
//随机种子
intN=0;
floatm,n,A,C,X[2],Y[2];
BeginBatchDraw();
for(intc=0;
c<
pow(10,8);
c++)
Sun();
for(intj=0;
j<
j++)
{
A=2*PI*c/t[j]+PI*j/60;
switch(j){
case0:
C=A+3;
break;
case1:
C=A+5;
case2:
C=A+2;
case3:
case4:
C=A+2.5;
case5:
C=A+0;
case6:
C=A-0.5;
case7:
}
m=a[j]*(1-e[j]*e[j]);
n=1+e[j]*cos(C);
x[j]=m*cos(C)/n;
y[j]=m*sin(C)/n;
IMAGEimg;
switch(j){
case0:
loadimage(&
case1:
\\x\\2.jpg"
x[j]-=13;
y[j]-=13;
case2:
\\x\\3.jpg"
x[j]-=17;
y[j]-=17;
case3:
loa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Cpp 作业