C 實現太陽系行星系統

2021-07-14 00:04:54 字數 1775 閱讀 6436

整個天體系統中,他們都是一顆星球(star),區別行星和恆星只需要通過它們是否具有父節點即可;其次,對於不同的星球而言,它們通常具有自身的材質,並且不同的材質會表現出自身是否發光,由此我們有了初步的物件模型。故我們將星球分為:普通能夠自轉並繞某個點公轉的星球(star), 具有特殊材質的星球(planet), 能夠發光的星球(lightplanet)。

一、程式設計模型假設:

星球的執行軌道為圓形;

自轉速度保持相同;

每次重新整理繪製的時候假設時間經過了一天。

二、整體思路:

初始化星球物件;

初始化 opengl 引擎, 實現 ondraw 和 onupdate;

星球應該自己負責處理自己的屬性、繞行關係、變換相關繪製,因此在設計星球的類時應該提供乙個繪製 draw() 方法;

星球也應該自己處理自己自轉公轉等更新顯示的繪製,因此在設計星球類時候也應該提供乙個更新方法 update();

在 ondraw() 中應調 用星球的 draw() 方法;

在 onupdate() 中呼叫星球的 update() 方法;

在 onkeyboard() 鍵盤調整整個太陽系的顯示.

三、每個星球而言,都具有如下的屬性:

顏色 color

公轉半徑 radius

自轉速度 selfspeed

公轉速度 speed

距離太陽中心的距離 distance

繞行的星球 parentstar

當前的自轉的角度 alphaself

當前的公轉角度 alpha

因此有如下的類:

class star 

// 引數為每次重新整理畫面時的時間跨度

virtual void update(long timespan);

protected:

float alphaself, alpha;

};class planet : public star

};class lightplanet : public planet

};

在太陽系中,太陽系顯然是由各個行星組成的;並且,對於太陽系而言,太陽系中行星運動後的檢視重新整理應該由太陽系來完成。據此太陽系成員變數應為包含行星的變數,成員函式應作為處理太陽系內的檢視重新整理及鍵盤響應等事件,所以,我們可以設計solarsystem類:

class solarsystem ;
程式的基本框架:main.cpp

//  main.cpp

#include #include "solarsystem.hpp"

#define window_x_pos 50

#define window_y_pos 50

#define width 700

#define height 700

solarsystem solarsystem;//例項化乙個太陽系

void ondisplay(void)

void onupdate(void)

void onkeyboard(unsigned char key, int x, int y)

int main(int argc, char* argv)

本實驗框架及思路來自實驗樓,執行的效果如下圖所示:

html ccs3實現的太陽系行星

太陽 sun 水星 mercury 水星軌道 mercuryorbit 金星 venus 金星軌道 venusorbit 地球 earth 地球軌道 earthorbit 火星 mars 火星軌道 marsorbit 木星 jupiter 木星軌道 jupiterorbit 土星 saturn 土星...

CSS 繪製太陽系行星執行軌跡

doctype html en utf 8 css3 動畫 title div.ex1 keyframes myfirst to webkit keyframes myfirst to div.ex2 keyframes myfirst2 25 50 100 webkit keyframes myf...

太陽系相關知識

太陽系是由受太陽引力約束的天體組成的系統,它的最大範圍約可延伸到1光年以外。太陽系的主要成員有 太陽 恆星 九大行星 包括地球 無數小行星 眾多衛星 包括月亮 還有彗星 流星體以及大量塵埃物質和稀 薄的氣態物質.在太陽系中,太陽的質量佔太陽系總質量的99.8 其它天體的總和不到有太陽的0.2 太陽是...