C语言大作业 观察行星的运行报告综述.docx
- 文档编号:30236066
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:19
- 大小:35.48KB
C语言大作业 观察行星的运行报告综述.docx
《C语言大作业 观察行星的运行报告综述.docx》由会员分享,可在线阅读,更多相关《C语言大作业 观察行星的运行报告综述.docx(19页珍藏版)》请在冰豆网上搜索。
C语言大作业观察行星的运行报告综述
作业名称:
观察行星的运行
学院:
教育实验学院
班级:
HC001505
学号:
2015300074
姓名:
祖陆晗
团队组成:
祖陆晗
西北工业大学
2019年4月15日
请填写以下十项内容,将表格按页对齐(插入空行),勿删除任何部分。
1、问题与背景(描述程序所要解决的问题或应用背景)
在物理课的学习中,当涉及到天体物理学的知识时,往往需要直观的观察天体的运行来加深对知识的理解。
本程序基于Windows界面编程下的OpenGL图形函数库,设计了一个Windows窗口程序,实现了OpenGL太阳系八大星系和月球运行轨迹的表现。
2、开发工具(列出所使用的开发工具和第3方开发库)
VisualC++6.0
OpenGL图形函数库
3、主要功能(详细说明程序的功能)
用Windows窗口程序实现OPENGL太阳系八大行星和月球运行轨迹的表现。
4、设计内容(详细描述解决问题的原理和方法、算法、数据结构等)
一.程序的整体结构:
1、在编程框架基础上使用OpenGL,需要包含以下头文件:
#include
#include
2、OpenGL绘制场景的框架
(1)头文件包含所有头文件或链接库文件
(2)全局定义应用实例、主窗口变量、数据结构等全局定义,固定不变
(3)窗口过程窗口过程函数的实现,固定不变
(4)注册窗口类注册窗口类函数的实现,除非修改窗口属性,一般不动
(5)初始化窗口初始化窗口函数的实现,除非修改窗口初始化值,一般不动
(6)消息处理函数原型给出所有消息处理函数的原型,增加/删除消息处理时变动
(7)消息循环Windows应用程序主消息循环,一般不动
(8)消息处理函数实现在这编写消息处理函数
(9)主函数Windows应用程序基本结构,一般不动
3.在框架下,在Display函数中绘制图形文字。
二、程序的流程
1、根据用户设置配置OpenGL的窗口
2、创建OpenGL运行的窗口
3、程序循环,运行Display绘图函数,显示图形
4、退出程序
5、程序文件与工程名称(标出程序中所有文件名、工程名称及其说明)
文件夹:
程序运行截图
.C:
观察行星的运行
应用程序:
观察行星的运行
Word文件:
观察行星的运行程序报告
6、函数模块(程序中各个函数的原型声明及其说明)
一,首先定义一个数据结构,定义八大行星及月球的旋转角度以及旋转中心。
staticGLfloatxRot=0.0f;
staticGLfloatyRot=0.0f;
staticfloatfMoonRot=0.0f;
staticfloatfWaterRot=0.0f;
staticfloatfGoldRot=0.0f;
staticfloatfEarthRot=0.0f;
staticfloatfFireRot=0.0f;
staticfloatfWoodRot=0.0f;
staticfloatfSoilRot=0.0f;
staticfloatfSkyRot=0.0f;
staticfloatfSeaRot=0.0f;
二,定义颜色数组
GLfloatwhiteLight[]={0.2f,0.2f,0.2f,1.0f};//白色光
GLfloatlightPos[]={0.0f,0.0f,0.0f,1.0f};
三,设置窗口
voidChangeSize(intw,inth)
{
GLfloatfAspect;
//防止被0所除
if(h==0)h=1;
//把视口设置为窗口大小
glViewport(0,0,w,h);
fAspect=(GLfloat)w/(GLfloat)h;//实际窗口的纵横比
//重置透视坐标系统
glMatrixMode(GL_PROJECTION);//还有一个参数是L_MODELVIEW
glLoadIdentity();
//产生透视投影
gluPerspective(60.0f,fAspect,1.0,4000);
//重置模型视图矩阵
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
四,使用深度测试,给物体贴色以及设置环境光源,初始化。
voidSetupRC()
五,绘制星球并设置轨道。
voidRenderScene(void)
六voidTimerFunc(intvalue)
七,主函数。
intmain(intargc,char*argv[])
7、使用说明(运行程序的小型说明书)
运行程序后,即可看见不同颜色的八大行星绕着太阳以其各自的轨迹去转动,同时还可以看见月球在绕着地球来转动。
行星的颜色分别对应为:
金黄-太阳
靛蓝-水星
土黄-金星
深蓝-地球
灰-月球
砖红-火星
橙黄-木星
草绿-土星
浅蓝-天王星
蓝-海王星
8、程序开发总结(简要叙述编写本作业的收获与思考)
通过这次写大作业,我发现辩证其实很有意思,学习编程的过程以及编程的过程就像是自己在创造一个世界,这极大的吸引了我的兴趣,并且在信息化的时代,编程是一门十分重要的学科。
同时随着错误越来越少,直到程序成功运行,心里的满足感也是越来越浓。
我认为以后计算机会是一种十分重要的工具,能够掌握编程会对我们的逻辑思考能力有很大的提高,我希望以后在能够继续进行C语言的学习,可以用它来创造更好的程序。
9、运行截图(附上程序运行的截图画面,至少有1幅,截图越翔实得分越高)
Windows中抓取当前活动窗口:
Alt+PrintScreen,抓取全屏:
PrintScreen。
或者使用HyperSnap等软件(XX搜索)。
1.opengl运行界面:
2.月球:
10、源程序(附上程序源代码,若是多个文件,标出文件名)
/*
制作:
西北工业大学
教育实验学院
祖陆晗
班级:
HC001505
学号:
2015300074
完成日期:
2016.1.3
*/
#include
#include
//旋转角度
staticGLfloatxRot=0.0f;
staticGLfloatyRot=0.0f;
staticfloatfMoonRot=0.0f;
staticfloatfWaterRot=0.0f;
staticfloatfGoldRot=0.0f;
staticfloatfEarthRot=0.0f;
staticfloatfFireRot=0.0f;
staticfloatfWoodRot=0.0f;
staticfloatfSoilRot=0.0f;
staticfloatfSkyRot=0.0f;
staticfloatfSeaRot=0.0f;
GLfloatwhiteLight[]={0.2f,0.2f,0.2f,1.0f};//白色光
GLfloatlightPos[]={0.0f,0.0f,0.0f,1.0f};//透视投影
voidChangeSize(intw,inth)
{
GLfloatfAspect;
if(h==0)h=1;//防止被0所除
glViewport(0,0,w,h);//把视口设置为窗口大小
fAspect=(GLfloat)w/(GLfloat)h;//实际窗口的纵横比
glMatrixMode(GL_PROJECTION);//重置透视坐标系统
glLoadIdentity();//还有一个参数是L_MODELVIEW
gluPerspective(60.0f,fAspect,1.0,4000);//产生透视投影
glMatrixMode(GL_MODELVIEW);//重置模型视图矩阵
glLoadIdentity();
}
voidSetupRC()
{
glEnable(GL_DEPTH_TEST);//启用深度测试
glEnable(GL_COLOR_MATERIAL);//使用不同颜色来贴物体表面
glClearColor(0.0f,0.0f,0.0f,1.0f);//黑色背景
glEnable(GL_LIGHTING);
glLightModelfv(GL_LIGHT_MODEL_AMBIENT,whiteLight);//使用whiteLight所指定的环境光
glLightfv(GL_LIGHT0,GL_POSITION,lightPos);//0号光源的位置
glEnable(GL_LIGHT0);
}
voidSpecialKeys(intkey,intx,inty)
{
if(key==GLUT_KEY_UP)
xRot-=5.0f;
if(key==GLUT_KEY_DOWN)
xRot+=5.0f;
if(key==GLUT_KEY_LEFT)
yRot-=5.0f;
if(key==GLUT_KEY_RIGHT)
yRot+=5.0f;
xRot=(GLfloat)((constint)xRot%360);
yRot=(GLfloat)((constint)yRot%360);
glutPostRedisplay();
}
voidRenderScene(void)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);//清除颜色和深度缓冲区
glPushMatrix();
glTranslatef(0.0f,0.0f,-300.0f);//把整个场景移动到视图中
glColor3ub(0,0,200);//绘制水星
glRotatef(fWaterRot,0.0f,1.0f,0.0f);//绕y轴旋转坐标系统,使水星围着太阳转
glTranslatef(30.0f,0.0f,0.0f);//坐标原点沿x轴移动30
fWaterRot+=15.0f;
if(fWaterRot>=365.0f)
fWaterRot=0.0f;
glutSolidSphere(7.0f,15.0f,15.0f);
glPopMatrix();
glPushMatrix();//绘制金星
glTranslatef(0.0f,0.0f,-300.0f);
glColor3ub(255,200,0);
glRotatef(fGoldRot,0.0f,1.0f,0.0f);//绕y轴旋转坐标系统,使水星围着太阳转
glTranslatef(60.0f,0.0f,0.0f);//坐标原点沿x轴移动30
fGoldRot+=10.0f;
if(fGoldRot>=365.0f)
fGoldRot=0.0f;
glutSolidSphere(10.0f,100.0f,100.0f);
glPopMatrix();
glPushMatrix();//绘制火星
glTranslatef(0.0f,0.0f,-300.0f);
glColor3ub(255,100,0);
glRotatef(fFireRot,0.0f,1.0f,0.0f);//绕y轴旋转坐标系统,使水星围着太阳转
glTranslatef(120.0f,0.0f,0.0f);//坐标原点沿x轴移动30
fFireRot+=5.0f;
if(fFireRot>=365.0f)
fFireRot=0.0f;
glutSolidSphere(8.0f,15.0f,15.0f);
glPopMatrix();
//绘制木星
glPushMatrix();
glTranslatef(0.0f,0.0f,-300.0f);
glColor3ub(255,150,0);
glRotatef(fWoodRot,0.0f,1.0f,0.0f);
//绕y轴旋转坐标系统,使水星围着太阳转
glTranslatef(150.0f,0.0f,0.0f);
//坐标原点沿x轴移动30
fWoodRot+=4.0f;
if(fWoodRot>=365.0f)
fWoodRot=0.0f;
glutSolidSphere(15.0f,15.0f,15.0f);
glPopMatrix();
//绘制土星
glPushMatrix();
glTranslatef(0.0f,0.0f,-300.0f);
glColor3ub(200,255,0);
glRotatef(fSoilRot,0.0f,1.0f,0.0f);
//绕y轴旋转坐标系统,使水星围着太阳转
glTranslatef(180.0f,0.0f,0.0f);
//坐标原点沿x轴移动30
fSoilRot+=3.0f;
if(fSoilRot>=365.0f)
fSoilRot=0.0f;
glutSolidSphere(13.0f,15.0f,15.0f);
glPopMatrix();
//绘制天王星
glPushMatrix();
glTranslatef(0.0f,0.0f,-300.0f);
glColor3ub(0,200,255);
glRotatef(fSkyRot,0.0f,1.0f,0.0f);
//绕y轴旋转坐标系统,使水星围着太阳转
glTranslatef(210.0f,0.0f,0.0f);
//坐标原点沿x轴移动30
fSkyRot+=2.0f;
if(fSkyRot>=365.0f)
fSkyRot=0.0f;
glutSolidSphere(12.0f,15.0f,15.0f);
glPopMatrix();
//绘制海王星
glPushMatrix();
glTranslatef(0.0f,0.0f,-300.0f);
glColor3ub(0,100,255);
glRotatef(fSeaRot,0.0f,1.0f,0.0f);//绕y轴旋转坐标系统,使水星围着太阳转
glTranslatef(240.0f,0.0f,0.0f);//坐标原点沿x轴移动30
fSeaRot+=1.0f;
if(fSeaRot>=365.0f)
fSeaRot=0.0f;
glutSolidSphere(13.0f,15.0f,15.0f);
glPopMatrix();
glPushMatrix();
//把整个场景移动到视图中
glTranslatef(0.0f,0.0f,-300.0f);
//设置材料颜色,太阳为黄色
glColor3ub(255,255,0);
glDisable(GL_LIGHTING);
glutSolidSphere(20.0f,100.0f,100.0f);
glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0,GL_POSITION,lightPos);
//绘制地球
glColor3ub(0,0,255);
glRotatef(fEarthRot,0.0f,1.0f,0.0f);//绕y轴旋转坐标系统,使地球围着太阳转
glTranslatef(90.0f,0.0f,0.0f);//坐标原点沿x轴移动105
glutSolidSphere(12.0f,15.0f,15.0f);
//根据基于地球的坐标进行旋转,并绘制月球
glColor3ub(200,200,200);
glRotatef(fMoonRot,0.0f,1.0f,0.0f);
glTranslatef(30.0f,0.0f,0.0f);//坐标原点沿x轴移动30
fMoonRot+=15.0f;
if(fMoonRot>=365.0f)
fMoonRot=0.0f;
glutSolidSphere(4.0f,15.0f,15.0f);
glPopMatrix();//回复矩阵状态
fEarthRot+=7.0f;
if(fEarthRot>=365.0f)
fEarthRot=0.0f;
//交换缓冲区
glutSwapBuffers();
}
voidTimerFunc(intvalue)
{
glutPostRedisplay();
glutTimerFunc(100,TimerFunc,1);
}
intmain(intargc,char*argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
glutInitWindowSize(800,600);
glutCreateWindow("太阳系八大行星和月球");
glutReshapeFunc(ChangeSize);
glutSpecialFunc(SpecialKeys);
glutDisplayFunc(RenderScene);
SetupRC();
glutTimerFunc(250,TimerFunc,1);
glutMainLoop();
return0;
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言大作业 观察行星的运行报告综述 语言 作业 观察 行星 运行 报告 综述