C語言大作業(yè)觀察行星的運行報告_第1頁
C語言大作業(yè)觀察行星的運行報告_第2頁
C語言大作業(yè)觀察行星的運行報告_第3頁
C語言大作業(yè)觀察行星的運行報告_第4頁
C語言大作業(yè)觀察行星的運行報告_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、程序設(shè)計挑戰(zhàn)式課程設(shè)計報告作業(yè)名稱:觀察行星的運行學(xué) 院:教育實驗學(xué)院班 級:HC001505學(xué) 號:2015300074姓 名:祖陸晗團隊組成:祖陸晗西北工業(yè)大學(xué)2022年5月31日請?zhí)顚懸韵率梼?nèi)容,將表格按頁對齊(插入空行),勿刪除任何部分。1、問題與背景(描述程序所要解決的問題或應(yīng)用背景) 在物理課的學(xué)習(xí)中,當(dāng)涉及到天體物理學(xué)的知識時,往往需要直觀的觀察天體的運行來加深對知識的理解。本程序基于Windows界面編程下的OpenGL圖形函數(shù)庫,設(shè)計了一個Windows窗口程序,實現(xiàn)了OpenGL太陽系八大星系和月球運行軌跡的表現(xiàn)。2、開發(fā)工具(列出所使用的開發(fā)工具和第3方開發(fā)庫)Visu

2、al C+ 6.0OpenGL圖形函數(shù)庫3、主要功能(詳細(xì)說明程序的功能)用Windows窗口程序?qū)崿F(xiàn)OPENGL太陽系八大行星和月球運行軌跡的表現(xiàn)。4、設(shè)計內(nèi)容(詳細(xì)描述解決問題的原理和方法、算法、數(shù)據(jù)結(jié)構(gòu)等)一程序的整體結(jié)構(gòu) :1、在編程框架基礎(chǔ)上使用OpenGL,需要包含以下頭文件: #include <windows.h> / Windows頭文件 #include <glglu.h> / OpenGL實用頭文件2、OpenGL繪制場景的框架(1)頭文件 包含所有頭文件或鏈接庫文件 (2)全局定義 應(yīng)用實例、主窗口變量、數(shù)據(jù)結(jié)構(gòu)等全局定義,固定不變(3)窗口過程

3、 窗口過程函數(shù)的實現(xiàn),固定不變 (4)注冊窗口類 注冊窗口類函數(shù)的實現(xiàn),除非修改窗口屬性,一般不動 (5)初始化窗口 初始化窗口函數(shù)的實現(xiàn),除非修改窗口初始化值,一般不動(6)消息處理函數(shù)原型 給出所有消息處理函數(shù)的原型,增加/刪除消息處理時變動 (7)消息循環(huán) Windows應(yīng)用程序主消息循環(huán),一般不動(8)消息處理函數(shù)實現(xiàn) 在這編寫消息處理函數(shù) (9)主函數(shù) Windows應(yīng)用程序基本結(jié)構(gòu),一般不動 3. 在框架下,在Display函數(shù)中繪制圖形文字。二、 程序的流程 1、 根據(jù)用戶設(shè)置配置OpenGL的窗口 2、 創(chuàng)建OpenGL運行的窗口 3、 程序循環(huán),運行Display繪圖函數(shù),顯

4、示圖形4、 退出程序5、程序文件與工程名稱(標(biāo)出程序中所有文件名、工程名稱及其說明)文件夾:程序運行截圖.C:觀察行星的運行應(yīng)用程序:觀察行星的運行Word文件:觀察行星的運行程序報告6、函數(shù)模塊(程序中各個函數(shù)的原型聲明及其說明)一,首先定義一個數(shù)據(jù)結(jié)構(gòu),定義八大行星及月球的旋轉(zhuǎn)角度以及旋轉(zhuǎn)中心。static GLfloat xRot = 0.0f; static GLfloat yRot = 0.0f; static float fMoonRot=0.0f;static float fWaterRot=0.0f; static float fGoldRot=0.0f; static flo

5、at fEarthRot=0.0f; static float fFireRot=0.0f; static float fWoodRot=0.0f; static float fSoilRot=0.0f; static float fSkyRot=0.0f; static float fSeaRot=0.0f;二,定義顏色數(shù)組GLfloat whiteLight = 0.2f, 0.2f, 0.2f, 1.0f ;/白色光GLfloat lightPos = 0.0f, 0.0f, 0.0f, 1.0f ;三,設(shè)置窗口void ChangeSize(int w, int h) GLfloat

6、fAspect; / 防止被0所除 if(h = 0) h = 1; / 把視口設(shè)置為窗口大小 glViewport(0, 0, w, h); fAspect = (GLfloat)w/(GLfloat)h; /實際窗口的縱橫比 / 重置透視坐標(biāo)系統(tǒng) glMatrixMode(GL_PROJECTION); /還有一個參數(shù)是L_MODELVIEW glLoadIdentity(); / 產(chǎn)生透視投影 gluPerspective(60.0f, fAspect, 1.0, 4000);/重置模型視圖矩陣 glMatrixMode(GL_MODELVIEW); glLoadIdentity();四

7、,使用深度測試,給物體貼色以及設(shè)置環(huán)境光源,初始化。void SetupRC() 五,繪制星球并設(shè)置軌道。void RenderScene(void)六void TimerFunc(int value)七,主函數(shù)。int main(int argc, char *argv)7、使用說明(運行程序的小型說明書)運行程序后,即可看見不同顏色的八大行星繞著太陽以其各自的軌跡去轉(zhuǎn)動,同時還可以看見月球在繞著地球來轉(zhuǎn)動。行星的顏色分別對應(yīng)為:金黃-太陽靛藍(lán)-水星土黃-金星深藍(lán)-地球灰-月球磚紅-火星橙黃-木星草綠-土星淺藍(lán)-天王星藍(lán)-海王星8、程序開發(fā)總結(jié)(簡要敘述編寫本作業(yè)的收獲與思考)通過這次寫大作

8、業(yè),我發(fā)現(xiàn)辯證其實很有意思,學(xué)習(xí)編程的過程以及編程的過程就像是自己在創(chuàng)造一個世界,這極大的吸引了我的興趣,并且在信息化的時代,編程是一門十分重要的學(xué)科。同時隨著錯誤越來越少,直到程序成功運行,心里的滿足感也是越來越濃。我認(rèn)為以后計算機會是一種十分重要的工具,能夠掌握編程會對我們的邏輯思考能力有很大的提高,我希望以后在能夠繼續(xù)進行C語言的學(xué)習(xí),可以用它來創(chuàng)造更好的程序。9、運行截圖(附上程序運行的截圖畫面,至少有1幅,截圖越翔實得分越高)Windows中抓取當(dāng)前活動窗口:Alt + Print Screen,抓取全屏:Print Screen?;蛘呤褂肏yperSnap等軟件(百度搜索)。 1.

9、opengl運行界面:2.月球:10、源程序(附上程序源代碼,若是多個文件,標(biāo)出文件名)/*制作:西北工業(yè)大學(xué) 教育實驗學(xué)院 祖陸晗班級:HC001505學(xué)號:2015300074完成日期:2016.1.3*/#include <windows.h>#include <gl/glut.h>/ 旋轉(zhuǎn)角度 static GLfloat xRot = 0.0f; static GLfloat yRot = 0.0f; static float fMoonRot=0.0f;static float fWaterRot=0.0f; static float fGoldRot=0.

10、0f; static float fEarthRot=0.0f; static float fFireRot=0.0f; static float fWoodRot=0.0f; static float fSoilRot=0.0f; static float fSkyRot=0.0f; static float fSeaRot=0.0f;GLfloat whiteLight = 0.2f, 0.2f, 0.2f, 1.0f ;/白色光GLfloat lightPos = 0.0f, 0.0f, 0.0f, 1.0f ;/透視投影void ChangeSize(int w, int h) GLf

11、loat fAspect; if(h = 0) h = 1;/ 防止被0所除 glViewport(0, 0, w, h);/ 把視口設(shè)置為窗口大小 fAspect = (GLfloat)w/(GLfloat)h; /實際窗口的縱橫比 glMatrixMode(GL_PROJECTION); / 重置透視坐標(biāo)系統(tǒng) glLoadIdentity();/還有一個參數(shù)是L_MODELVIEW gluPerspective(60.0f, fAspect, 1.0, 4000);/ 產(chǎn)生透視投影 glMatrixMode(GL_MODELVIEW);/重置模型視圖矩陣 glLoadIdentity();

12、 void SetupRC() 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所指定的環(huán)境光 glLightfv(GL_LIGHT0,GL_POSITION,lightPos);/0號光源的位置 glEnable(GL_LIGHT

13、0);void SpecialKeys(int key, int x, int y)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)(const int)xRot % 360); yRot = (GLfloat)(const int)yRot % 360);glutPostRedisplay();void RenderScene

14、(void) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);/ 清除顏色和深度緩沖區(qū) glPushMatrix();glTranslatef(0.0f,0.0f,-300.0f);/把整個場景移動到視圖中g(shù)lColor3ub(0, 0, 200);/繪制水星glRotatef(fWaterRot, 0.0f, 1.0f, 0.0f);/繞y軸旋轉(zhuǎn)坐標(biāo)系統(tǒng),使水星圍著太陽轉(zhuǎn)glTranslatef(30.0f,0.0f,0.0f); /坐標(biāo)原點沿x軸移動30fWaterRot+=15.0f;if(fWaterRot>=365.0f)f

15、WaterRot=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軸旋轉(zhuǎn)坐標(biāo)系統(tǒng),使水星圍著太陽轉(zhuǎn)glTranslatef(60.0f,0.0f,0.0f); /坐標(biāo)原點沿x軸移動30fGoldRot+=10.0f;if(fGoldRot>=365.0f)fGoldRot=0.0f;glutSolid

16、Sphere(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軸旋轉(zhuǎn)坐標(biāo)系統(tǒng),使水星圍著太陽轉(zhuǎn)glTranslatef(120.0f,0.0f,0.0f); /坐標(biāo)原點沿x軸移動30fFireRot+=5.0f;if(fFireRot>=365.0f)fFireRot=0.0f;glutSolidSphere(8.0f,15.0f,15

17、.0f); glPopMatrix();/繪制木星glPushMatrix();glTranslatef(0.0f,0.0f,-300.0f);glColor3ub(255, 150, 0);glRotatef(fWoodRot,0.0f, 1.0f, 0.0f);/繞y軸旋轉(zhuǎn)坐標(biāo)系統(tǒng),使水星圍著太陽轉(zhuǎn)glTranslatef(150.0f,0.0f,0.0f); /坐標(biāo)原點沿x軸移動30fWoodRot+=4.0f;if(fWoodRot>=365.0f)fWoodRot=0.0f;glutSolidSphere(15.0f,15.0f,15.0f); glPopMatrix();/繪

18、制土星glPushMatrix();glTranslatef(0.0f,0.0f,-300.0f);glColor3ub(200, 255, 0);glRotatef(fSoilRot,0.0f, 1.0f, 0.0f);/繞y軸旋轉(zhuǎn)坐標(biāo)系統(tǒng),使水星圍著太陽轉(zhuǎn)glTranslatef(180.0f,0.0f,0.0f); /坐標(biāo)原點沿x軸移動30fSoilRot+=3.0f;if(fSoilRot>=365.0f)fSoilRot=0.0f;glutSolidSphere(13.0f,15.0f,15.0f); glPopMatrix();/繪制天王星glPushMatrix();glT

19、ranslatef(0.0f,0.0f,-300.0f);glColor3ub(0, 200, 255);glRotatef(fSkyRot,0.0f, 1.0f, 0.0f);/繞y軸旋轉(zhuǎn)坐標(biāo)系統(tǒng),使水星圍著太陽轉(zhuǎn)glTranslatef(210.0f,0.0f,0.0f); /坐標(biāo)原點沿x軸移動30fSkyRot+=2.0f;if(fSkyRot>=365.0f)fSkyRot=0.0f;glutSolidSphere(12.0f,15.0f,15.0f); glPopMatrix();/繪制海王星glPushMatrix();glTranslatef(0.0f,0.0f,-300.

20、0f);glColor3ub(0, 100, 255);glRotatef(fSeaRot,0.0f, 1.0f, 0.0f);/繞y軸旋轉(zhuǎn)坐標(biāo)系統(tǒng),使水星圍著太陽轉(zhuǎn)glTranslatef(240.0f,0.0f,0.0f); /坐標(biāo)原點沿x軸移動30fSeaRot+=1.0f;if(fSeaRot>=365.0f)fSeaRot=0.0f;glutSolidSphere(13.0f,15.0f,15.0f); glPopMatrix(); glPushMatrix();/把整個場景移動到視圖中g(shù)lTranslatef(0.0f,0.0f,-300.0f);/設(shè)置材料顏色,太陽為黃色g

21、lColor3ub(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軸旋轉(zhuǎn)坐標(biāo)系統(tǒng),使地球圍著太陽轉(zhuǎn)glTranslatef(90.0f,0.0f,0.0f); /坐標(biāo)原點沿x軸移動105glutSolidSphere(12.0f,15.0f,15.0f);/ 根據(jù)基于地球的坐標(biāo)進行旋轉(zhuǎn),并繪制月球glColor3ub(200, 200, 200

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論