太阳系行星运行模拟C++程序语言之欧阳育创编.docx
- 文档编号:3124936
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:13
- 大小:106.58KB
太阳系行星运行模拟C++程序语言之欧阳育创编.docx
《太阳系行星运行模拟C++程序语言之欧阳育创编.docx》由会员分享,可在线阅读,更多相关《太阳系行星运行模拟C++程序语言之欧阳育创编.docx(13页珍藏版)》请在冰豆网上搜索。
太阳系行星运行模拟C++程序语言之欧阳育创编
太阳系行星运行模拟
时间:
2021.02.04
创作:
欧阳育
组员:
2011年9月2日
概述
太阳系(SolarSystem)就是我们现在所在的恒星系统。
它是以太阳为中心,和所有受到太阳引力约束的天体的集合体:
8颗行星冥王星已被开除、至少165颗已知的卫星,和数以亿计的太阳系小天体。
这些小天体包括小行星、柯伊伯带的天体、彗星和星际尘埃。
广义上,太阳系的领域包括太阳、4颗像地球的内行星、由许多小岩石组成的小行星带、4颗充满气体的巨大外行星、充满冰冻小岩石、被称为柯伊伯带的第二个小天体区。
在柯伊伯带之外还有黄道离散盘面、太阳圈和依然属于假设的奥尔特云。
模拟太阳系不仅仅是完成作业,也能让我们更近一步的了解太阳系,拓广知识面,对行星的运行有基本的感性和理性感知。
增加我们对宇宙探索的渴望,可能培养出又一批天文学家。
OpenGL(全写OpenGraphicsLibrary)是个定义了一个跨编程语言、跨平台的编程接口的规格,它用于三维图象(二维的亦可)。
OpenGL是个专业的图形程序接口,是一个功能强大,调用方便的底层图形库。
OpenGL是一个开放的三维图形软件包,它独立于窗口系统和操作系统,以它为基础开发的应用程序可以十分方便地在各种平台间移植;OpenGL可以与VisualC++紧密接口,便于实现机械手的有关计算和图形算法,可保证算法的正确性和可靠性;OpenGL使用简便,效率高。
它具有七大功能:
1.建模:
OpenGL图形库除了提供基本的点、线、多边形的绘制函数外,还提供了复杂的三维物体(球、锥、多面体、茶壶等)以及复杂曲线和曲面绘制函数。
2.变换:
OpenGL图形库的变换包括基本变换和投影变换。
基本变换有平移、旋转、变比镜像四种变换,投影变换有平行投影(又称正射投影)和透视投影两种变换。
其变换方法有利于减少算法的运行时间,提高三维图形的显示速度。
3.颜色模式设置:
OpenGL颜色模式有两种,即RGBA模式和颜色索引(ColorIndex)。
4.光照和材质和镜面光(SpecularLight)。
材质是用光反射率来表示。
场景(Scene)中物体最终反映到人眼的颜色是光的红绿蓝分量与材质红绿蓝分量的反射率相乘后形成的颜色。
5:
纹理映射(TextureMapping)。
利用OpenGL纹理映射功能可以十分逼真地表达物体表面细节。
6:
位图显示和图象增强图象功能除了基本的拷贝和像素读写外,还提供融合(Blending)、反走样(Antialiasing)和雾(fog)的特殊图象效果处理。
以上三条可使被仿真物更具真实感,增强图形显示的效果。
7:
双缓存动画(DoubleBuffering)双缓存即前台缓存和后台缓存,简言之,后台缓存计算场景、生成画面,前台缓存显示后台缓存已画好的画面。
此外,利用OpenGL还能实现深度暗示(DepthCue)、运动模糊(MotionBlur)等特殊效果。
从而实现了消隐算法。
具体实现
利用VC6.0和OpenGL绘制太阳系模拟,以最简单的方式,新建一个win32consoleapplication,加入以下代码:
#include
#include
#include
#include"gl/glut.h"
//行星
GLfloatrot0=30.0;
GLfloatrot1=0.0;
GLfloatrot2=0.0;
GLfloatrot3=0.0;
GLfloatrot4=0.0;
GLfloatrot5=0.0;
GLfloatrot6=0.0;
GLfloatrot7=0.0;
GLfloatrot8=0.0;
//卫星
GLfloatrot9=0.0;
GLfloatrot10=0.0;
GLfloatrot11=0.0;
voidinit()
{
glClearColor(0.0,0.0,0.0,0.0);
glClearDepth(1.0);
glShadeModel(GL_FLAT);
}
voiddisplay()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glColor3f(1.0,1.0,1.0);
glLoadIdentity();
//gluLookAt(0,10,10,0,0,0,0,1,0);
//glRotatef(45.0,0.0,0.0,1.0);
glTranslatef(0.0,0.0,-20.0);
glRotatef(90.0,1.0,0.0,0);
glPushMatrix();
//绘制太阳
glColor3f(1.0,0.0,0.0);
glutSolidSphere(2.0,32,32);
//绘制地球
glPushMatrix();
glColor3f(0.0,0.0,1.0);
//绘制辅助轨道
glRotatef(90,1.0,0,0.0);
glutSolidTorus(0.02,5.0,10,64);
glRotatef(-90,1.0,0,0.0);
//设置地球公转速度
glRotatef(rot0,0.0,1.0,0.0);
//设置地球半径
glTranslatef(5.0,0.0,0.0);
//设置地球自转速度
//glRotatef(rot1,0.0,1.0,0.0);
//绘制地球
glutSolidSphere(0.4,32,32);
//绘制地球的卫星-月亮
glColor3f(0.5,0.6,0.5);
//抵消地球自转影响
//glRotatef(-rot1,0.0,1.0,0.0);
//绘制辅助轨道
glRotatef(90,1.0,0,0.0);
glRotatef(-90,1.0,0,0.0);
//设置月亮公转速度
glRotatef(rot9,0.0,1.0,0.0);
//设置月亮公转半径
glTranslatef(0.6,0.0,0.0);
//绘制月亮
glutSolidSphere(0.1,10,8);
glPopMatrix();
//绘制水星
glPushMatrix();
glColor3f(0.0,1.0,1.0);
//绘制辅助轨道
glRotatef(90,1.0,0,0.0);
glutSolidTorus(0.02,2.5,10,64);
glRotatef(-90,1.0,0,0.0);
//设置水星公转速度
glRotatef(rot1,0.0,1.0,0.0);
//设置水星公转半径
glTranslatef(2.5,0.0,0.0);
//设置水星自传
glRotatef(rot3,0.0,1.0,0.0);
//绘制水星
glutSolidSphere(0.2,32,32);
glPopMatrix();
//绘制金星
glPushMatrix();
glColor3f(0.0,1.0,0.0);
//绘制辅助轨道
glRotatef(90,1.0,0,0.0);
glutSolidTorus(0.02,3.4,10,64);
glRotatef(-90,1.0,0,0.0);
//设置金星公转速度
glRotatef(rot2,0.0,3.0,0.0);
//设置金星公转半径
glTranslatef(3.4,0.0,0.0);
//设置金星自传
glRotatef(rot0,0.0,1.0,0.0);
//绘制金星
glutSolidSphere(0.3,32,32);
glPopMatrix();
//绘制火星
glPushMatrix();
glColor3f(1.0,0.0,0.0);
//绘制辅助轨道
glRotatef(90,1.0,0,0.0);
glutSolidTorus(0.02,6.6,10,64);
glRotatef(-90,1.0,0,0.0);
//设置火星公转速度
glRotatef(rot3,0.0,4.0,0.0);
//设置火星公转半径
glTranslatef(6.6,0.0,0.0);
//设置火星自传
glRotatef(rot7,0.0,2.0,0.0);
//绘制火星
glutSolidSphere(0.5,32,32);
glPopMatrix();
//绘制木星
glPushMatrix();
glColor3f(2.0,0.1,1.0);
//绘制辅助轨道
glRotatef(90,1.0,0,0.0);
glutSolidTorus(0.02,8.5,10,64);
glRotatef(-90,1.0,0,0.0);
//设置木星公转速度
glRotatef(rot4,0.0,0.4,0.0);
//设置木星公转半径
glTranslatef(8.5,0.0,0.0);
//设置木星自传
glRotatef(rot3,0.0,0.3,0.0);
//绘制木星
glutSolidSphere(1.0,32,32);
//绘制木星卫星-木卫1
glColor3f(0.4,0.3,0.5);
//抵消地球自转影响
//glRotatef(-rot1,0.0,1.0,0.0);
//绘制辅助轨道
glRotatef(90,1.0,0,0.0);
glRotatef(-90,1.0,0,0.0);
//设置木卫1公转速度
glRotatef(rot10,0.0,1.0,0.0);
//设置木卫1公转半径
glTranslatef(1.3,0.0,0.0);
//绘制木卫1
glutSolidSphere(0.1,10,8);
//绘制木星卫星-木卫2
glColor3f(0.5f,0.5f,0.5f);
//抵消地球自转影响
//glRotatef(-rot1,0.0,1.0,0.0);
//绘制辅助轨道
glRotatef(90,1.0,0,0.0);
glRotatef(-90,1.0,0,0.0);
//设置木卫2公转速度
glRotatef(rot11,0.0,1.0,0.0);
//设置木卫2公转半径
glTranslatef(1.2,0.0,0.0);
//绘制木卫2
glutSolidSphere(0.08,10,8);
glPopMatrix();
//绘制土星
glPushMatrix();
glColor3f(1.0f,1.0f,0.0f);
//绘制辅助轨道
glRotatef(90,1.0,0,0.0);
glutSolidTorus(0.02,12.5,10,64);
glRotatef(-90,1.0,0,0.0);
//设置土星公转速度
glRotatef(rot5,0.0,0.4,0.0);
//设置土星公转半径
glTranslatef(12.5,0.0,0.0);
//设置土星自传
glRotatef(rot3,0.0,0.3,0.0);
//绘制土星
glutSolidSphere(0.85,32,32);
//绘制土星光环
glRotatef(90,1.0,0,0.0);
glutSolidTorus(0.1,1.25,10,64);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 太阳系 行星 运行 模拟 C+ 程序语言 欧阳 创编
![提示](https://static.bdocx.com/images/bang_tan.gif)