太陽系概貌模擬的設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
太陽系概貌模擬的設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)
太陽系概貌模擬的設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)
太陽系概貌模擬的設(shè)計(jì)與實(shí)現(xiàn)_第4頁(yè)
太陽系概貌模擬的設(shè)計(jì)與實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩44頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

武漢理工大學(xué) 學(xué)士學(xué)位 論文 1 目 錄 摘 要 . 3 Abstract . 4 1 緒論 . 5 2 系統(tǒng)環(huán)境 . 7 2.1 系統(tǒng)所用關(guān)于 visual c+知識(shí)介紹 . 7 2.1.1 MFC 工程文件中自動(dòng)生成類 . 8 2.1.2 使用點(diǎn)、刷子、筆、位圖 . 9 2.2 太陽系簡(jiǎn)介 . 10 3 系統(tǒng)總體設(shè)計(jì) . 11 3.1 功能設(shè)計(jì) . 11 3.2 系統(tǒng)界面設(shè)計(jì) . 12 3.2.1 側(cè)視界面 . 12 3.2.2 俯視界面 . 12 3.2.3 工具條 . 12 3.3 系統(tǒng)模塊設(shè)計(jì) . 12 3.3.1 放大模塊 . 12 3.3.2 縮小模塊 . 12 3.3.3 左移模塊 . 12 3.3.4 右移模塊 . 12 3.3.5 上移模塊 . 13 3.3.6 下移模塊 . 13 3.3.7 運(yùn)行模塊 . 13 3.3.8 暫停模塊 . 13 3.3.9 還原模塊 . 13 3.4 測(cè)試設(shè)計(jì) . 13 4 系統(tǒng)界面設(shè)計(jì) . 14 4.1 側(cè)視界面 . 14 4.1.1 過程設(shè)計(jì) . 14 4.1.2 數(shù)據(jù)結(jié)構(gòu) . 14 4.1.3 模塊實(shí)現(xiàn)及偽代碼 . 15 4.1.3 側(cè)試界面效果圖 . 18 4.2 俯視界面 . 18 4.2.1 過程設(shè)計(jì) . 18 4.2.2 數(shù)據(jù)結(jié)構(gòu) . 19 4.2.3 模塊實(shí)現(xiàn)及偽代碼 . 19 武漢理工大學(xué) 學(xué)士學(xué)位 論文 2 4.2.2 界面效果圖 . 21 5 功能模塊設(shè)計(jì) . 22 5.1 放大模塊 . 22 5.1.1 模塊實(shí)現(xiàn)及偽代碼 . 22 5.1.2 效果圖 . 23 5.2 縮小模塊 . 24 5.2.1 模塊實(shí)現(xiàn)及偽代碼 . 24 5.2.2 效果圖 . 25 5.3 左移模塊 . 26 5.3.1 模塊實(shí)現(xiàn)及偽代碼 . 26 5.3.2 效果圖 . 27 5.4 右移模塊 . 28 5.4.1 模塊實(shí)現(xiàn)及偽代碼 . 28 5.4.2 效果圖 . 29 5.5 上移模塊 . 30 5.5.1 實(shí)現(xiàn)代碼 . 30 5.5.2 效果圖 . 31 5.6 下移模塊 . 32 5.6.1 實(shí)現(xiàn)代碼 . 33 5.6.2 效果圖 . 33 5.7 運(yùn)行模塊 . 35 5.7.1 模塊實(shí)現(xiàn)及偽代碼 . 35 5.7.2 效果圖 . 36 5.8 暫停模塊 . 37 5.8.1 模塊實(shí)現(xiàn)及代碼 . 37 5.8.2 效果圖 . 38 5.9 還原模塊 . 38 5.9.1 模塊實(shí)現(xiàn)及偽代碼 . 38 6 總結(jié)與展望 . 40 參考文獻(xiàn) . 41 致 謝 . 42 附 錄 . 43 武漢理工大學(xué) 學(xué)士學(xué)位 論文 3 摘 要 本次設(shè)計(jì)的內(nèi)容 是 太陽系概貌模擬 系統(tǒng) 。 主要 功能包括 :近日、遠(yuǎn)日行星的顯示, 放大、縮小、左(右、上、下)移動(dòng)功能,多視角觀察太陽系概貌,行星 運(yùn)行、靜止以及初始狀態(tài)復(fù)原 。 在這個(gè)系統(tǒng)中 有二種視角來觀看太陽系,分別為:俯視和側(cè)視。 每種視角下都可以實(shí)現(xiàn)放大、縮小、平移、靜止和運(yùn)行功能。 實(shí)現(xiàn)此系統(tǒng)的 第一個(gè) 難點(diǎn) 就在于對(duì)行星運(yùn)動(dòng)的處理,想讓行星在軌道上 動(dòng)起來,就要知道這個(gè)行星下個(gè)時(shí)刻的坐標(biāo)是什么,在放大、縮小和上(下,左,右)移動(dòng)軌道后,運(yùn)行軌道的參數(shù) 相應(yīng)變化了 ,要想使行星隨著軌道的變動(dòng)還能準(zhǔn)確的在軌道上運(yùn)行的話,就得對(duì) 行星下個(gè)位置的坐標(biāo)的計(jì)算公式做變型,也就是加上或減去一些偏差值 。第二個(gè)難點(diǎn)就在于對(duì)行星的動(dòng)和靜的處理。在單線程的情況下,線程開始執(zhí)行后,直到結(jié)束我們是沒法手動(dòng)去干涉它的,那么想在行星動(dòng)的時(shí)候讓它靜下來,并且再次動(dòng)的時(shí)候是接著上次停下來的地方運(yùn)行的話,只使用一個(gè)線程的話是很難做到的,所以在這 點(diǎn)兒的處理上我用到了多線程。主線程中來處理軌道的參數(shù),輔線程運(yùn)行的時(shí)候讓行星運(yùn)動(dòng)起 來。 本系統(tǒng)比較好的完成了所要求的任務(wù),綜合考慮了用戶使用的方便,盡量做到了界面的美觀和功能的實(shí)用。 關(guān)鍵詞 : 多線程, 行星運(yùn)動(dòng) ,多視角 武漢理工大學(xué) 學(xué)士學(xué)位 論文 4 Abstract My graduation design is the system of The Design and Implementation Of Solar System. The function mainly includes: display the planets far from the sun, display the planets near the sun, zoom the solar system in (out), move the solar system left(right, up and down) ,overview the solar system from multi-angle, planet run and stop. Through this system ,we can see the global profile of the Solar System and the distant solar system become real with the computer.There are two kinds of angle to watch the solar system. One is looking from up to down and the other is looking from side. Both angle can realize all the function: zoom the solar system in (out), move the solar system left(right, up and down) , planet run and stop. One difficulty to implement this system is handling the movement of the planet. If you want the planet run on the orbit currently you must know the coordinate that the planet will arrive. As the orbit is a ellipse we can use the ellipse formula to calculate the coordinate . However ,when you zoom the ellipse out or move the orbit left the parameter of the ellipse will chang. To make the planet run currently on the orbit we have to do variations on the formula. That is ,parameters plus or minus some offset to make sure the planet can find its orbit. Another difficulty to implement this system is how to stop the running planet. As we know in the case of single thread when the thread begins running it will not stop until the thread end. It is very difficult to stop the running thread in the case of single thread. So it is necessary to use multithread to handle it. The main thread is used to set the parameters of orbit. Assistant thread is used to control the planets action. If we want the planet to move we need to create assistant thread. If we want the planet to stop we need to cancel the assistant thread. The system complete the requested task. Considering the convenience of the user I try my best to prettify the interface of the system and prefect the function. Key words: multithread , the movement of planets, multi_angle 武漢理工大學(xué) 學(xué)士學(xué)位 論文 5 1 緒論 隨 著計(jì)算機(jī)技術(shù)的不斷進(jìn)步, 計(jì)算機(jī)的應(yīng)用 已經(jīng) 滲透入人們生活的方方面面,現(xiàn)在幾乎所有的鄰域都離不開計(jì)算機(jī)。在生活中人們需要用計(jì)算機(jī)來進(jìn)行普通的計(jì)算,辦公,娛樂,以及存儲(chǔ)。在高科技中,那就更離不開計(jì)算機(jī)了,發(fā)射導(dǎo)彈,飛船上天, 預(yù)測(cè)天體運(yùn)行等等,這些高科技離不開計(jì)算機(jī),計(jì)算機(jī)也離不開高科技,計(jì)算機(jī)可以使很繁鎖的任務(wù)變得簡(jiǎn)單,人們?nèi)找嬖龆嗟男枨笠泊龠M(jìn)了計(jì)算機(jī)的發(fā)展。 我這次所做的系統(tǒng)是有關(guān)計(jì)算機(jī)模擬方面的應(yīng)用 。 計(jì)算機(jī)模擬是 指用電子計(jì)算機(jī)對(duì)科學(xué)問題或社會(huì)問題進(jìn)行模仿性試驗(yàn)研究 , 從而 建立真實(shí)系統(tǒng)的模型 ,并通過計(jì)算來觀察系統(tǒng)隨時(shí)間變化的行為 或系統(tǒng)表 現(xiàn)出來的特性 。計(jì)算機(jī)模擬 是以相似原理、模型理論、系統(tǒng)技術(shù)、信息技術(shù)以及其應(yīng)用領(lǐng)域的有關(guān)專業(yè)技術(shù)為基礎(chǔ),以計(jì)算機(jī)系統(tǒng)、與應(yīng)用相關(guān)的物理效應(yīng)設(shè)備及仿真器為工具,利用系統(tǒng)模型參與已有或設(shè)想的系統(tǒng)進(jìn)行研究、分析、設(shè)計(jì)、加工生產(chǎn)、試驗(yàn)、運(yùn)行、評(píng)估、維護(hù)、和報(bào)廢(全生命周期)活動(dòng)的一門多學(xué)科的綜合性技術(shù)。半個(gè)多世紀(jì)來, 計(jì)算機(jī)模擬 技術(shù)在各類應(yīng)用需求的牽引及有關(guān)學(xué)科技術(shù)的推動(dòng)下,已經(jīng)發(fā)展形成了較完整的專業(yè)技術(shù)體系,并迅速地發(fā)展為一項(xiàng)通用性、戰(zhàn)略性技術(shù)。它已成功 地應(yīng)用于航空航天、信息、生物、材料、能源、先進(jìn)制造等高新技術(shù)和工業(yè)、農(nóng)業(yè)、商業(yè)、教育、軍事、交通、社會(huì)、經(jīng)濟(jì)、醫(yī)學(xué)、生命、娛樂、生活服務(wù)等眾多領(lǐng)域。人們認(rèn)為, 模擬 技術(shù)與高性能計(jì)算一起,正成為繼理論研究和實(shí)驗(yàn)研究之后第三種認(rèn)識(shí)、改造客觀世界的重要手段。 我們每個(gè)人從小時(shí)候起都對(duì)茫茫地宇宙充滿無限的好奇與向往,但是人類相對(duì)于整個(gè)宇宙來說太渺小 了,就連我們想飛離我們的地球都是一件難事兒 。每個(gè)小孩或許都會(huì)問他們的父母宇宙長(zhǎng)的什么樣,作為我們?cè)撛趺椿卮鹚麄兡?,如果沒有一個(gè)完備的演示系統(tǒng)我們恐怕難以回答他們的問題。科學(xué) 家要想發(fā)射飛船,或著說實(shí)現(xiàn)太空行走,都是要以他們非常了解太陽系為前提,那么他們?nèi)绾蜗蚱渌目茖W(xué)家描述太陽系的狀況呢,他們也必須借助計(jì)算機(jī)來逼真的模擬太陽系的運(yùn)行情況才能和其它科學(xué)家合作來解決有關(guān)宇宙的問題。在天體運(yùn)行中,我們要處理大量的數(shù)據(jù),還有這些數(shù)據(jù)都是非常大的浮點(diǎn)型數(shù),如果單純通過人工操作計(jì)算,那么即使我們都會(huì)計(jì)算,那也不能保證這些數(shù)據(jù)的準(zhǔn)確性,更何況人根本不可能手工處理這么寵大的數(shù)據(jù),所以完善的高質(zhì)量的太陽系模擬系統(tǒng)應(yīng)運(yùn)而生了。 這次我所要做的太陽系概貌的模擬系統(tǒng) 就是用來 模擬太陽系運(yùn)行時(shí)最主要最基本 的特征,實(shí)現(xiàn)太陽系各行星運(yùn)動(dòng)概貌的模擬。讓用戶可以全面的看到整個(gè)太陽系的全貌,并且看到太陽系各星體的運(yùn)行狀況 ,滿足那些普通用戶的需求 ,但是此系統(tǒng)不能完成像科學(xué)實(shí)驗(yàn)中的那些關(guān)于星體運(yùn)行的計(jì)算 。但是 通過太陽系概貌的模擬系統(tǒng)我們可以看到太陽系的全貌 ,以及太陽系運(yùn)行時(shí)最主要最基本的特征,實(shí)現(xiàn)太陽系各行星運(yùn)動(dòng)概貌的模擬 ,讓用武漢理工大學(xué) 學(xué)士學(xué)位 論文 6 戶可以多方面多視角的觀看太陽系 【 1】 。這可以滿足用戶想逼真觀看太陽系的需求,讓我們仿佛置身宇宙中,仿佛站在太陽系的上方看到太陽系的動(dòng)態(tài)效果。當(dāng)然這是了解太陽系的第一步,這也為以后精確認(rèn)識(shí)太陽系的各 種其它特性,為以后對(duì)太陽系的精確研究并且預(yù)測(cè)末來太陽系的運(yùn)行打下基礎(chǔ)。 本系統(tǒng)使用 VC+來設(shè)計(jì)與實(shí)現(xiàn)。為了使效果看起來更逼真,我從網(wǎng)上下載太陽系各大行星的圖片來進(jìn)行處 理 【 2】 。在此系統(tǒng)中,用戶可以體驗(yàn)二種視角來觀賞太陽系的運(yùn)行,不僅如此 用戶還可以放大、縮小, 上(下,左,右)移動(dòng)太陽系,并且還可以將運(yùn)行的行星暫停,還原 等一系列功能。 該系統(tǒng)的設(shè)計(jì)從頭到尾都是采用軟件工程學(xué)的設(shè)計(jì)方法,向讀者展示了一個(gè)模擬系統(tǒng)的設(shè)計(jì)過程?,F(xiàn)在簡(jiǎn)單地介紹本論文的組織內(nèi)容,讓讀者對(duì)本系統(tǒng)的設(shè)計(jì)與開發(fā)有個(gè)大概的了解,能清楚地知道每節(jié)將 要向讀者介紹那些內(nèi)容。 2 系統(tǒng)環(huán)境:本章向大家介紹有關(guān) Visual C+方向的知識(shí),以及太陽系的基本資料。 3 系統(tǒng)的總體設(shè)計(jì):此章開始從需求分析介紹,確定系統(tǒng)的功能模塊,設(shè)計(jì)系統(tǒng)的界面。 4 系統(tǒng)的界 面設(shè)計(jì):由于此系統(tǒng)是模擬系統(tǒng),所以對(duì)界面的要求比較高,我將用一 章來說明我的系統(tǒng)界面。 5 系統(tǒng)的功能模塊設(shè)計(jì):此章介始各模塊的實(shí)現(xiàn)方法,以及里面比較經(jīng)典的算法。 6 總結(jié)與展望總結(jié)了本此設(shè)計(jì)心得體會(huì),并對(duì)未來作了初步的展望。 武漢理工大學(xué) 學(xué)士學(xué)位 論文 7 2 系統(tǒng)環(huán)境 2.1 系統(tǒng)所用關(guān)于 visual c+知識(shí) 介紹 Visual C+是 Microsoft 公司的 Visual Studio 開發(fā)工具箱中的一個(gè) C+程序開發(fā)包。VisualStudio 提供了一整套開發(fā) Internet 和 Windows 應(yīng)用程序的工具,包括 VisualC+, Visual Basic, Visual Foxpro, Visual InterDev, Visual J+以及其他輔助工具,如代碼管理工具 Visual SourceSafe 和聯(lián)機(jī)幫助系統(tǒng) MSDN。 Visual C+包中除包括 C+編譯器外,還包括所有的庫(kù)、例子和為創(chuàng)建 Windows 應(yīng)用程序所需要的 文檔。 從最早期的 1.0 版本,發(fā)展到最新的 6.0 版本, Visual C+已經(jīng)有了很大的變化,在界面、功能、庫(kù)支持方面都有許多的增強(qiáng)。最新的 6.0 版本在編譯器、 MFC 類庫(kù)、編輯器以及聯(lián)機(jī)幫助系統(tǒng)等方面都比以前的版本做了較大改進(jìn)。 Visual C+一般分為三個(gè)版本 :學(xué)習(xí)版、專業(yè)版和企業(yè)版,不同的版本適合于不同類型的應(yīng)用開發(fā)。實(shí)驗(yàn)中可以使用這三個(gè)版本的任意一種。 Visual C+6.0 不僅是一個(gè) C+編譯器,而且是一個(gè)基于 Windows 操作系統(tǒng)的可視化集成開發(fā)環(huán)境( integrated development environment,IDE)。 Visual C+6.0 由許多組件組成,包括編輯器、調(diào)試器以及程序向?qū)?AppWizard、類向?qū)?Class Wizard 等開發(fā)工具。 這些組件通過一個(gè)名為 Developer Studio 的組件集成為和諧的開發(fā)環(huán)境。 Visual C+它大概可以分成三個(gè)主要的部分: 1 Developer Studio 這是一個(gè)集成開發(fā)環(huán)境,我們?nèi)粘9ぷ鞯?99%都是在它上面完成的,再加上它的標(biāo)題赫然寫著 “Microsoft Visual C+”,所以很多人理所當(dāng)然 的認(rèn)為,那就是 Visual C+了。其實(shí)不然,雖然 Developer Studio 提供了一個(gè)很好的編輯器和很多 Wizard,但實(shí)際上它沒有任何編譯和鏈接程序的功能,真正完成這些工作的幕后英雄后面會(huì)介紹。我們也知道, Developer Studio 并不是專門用于 VC 的,它也同樣用于 VB, VJ,VID 等 Visual Studio 家族的其他同胞兄弟。所以不要把 Developer Studio 當(dāng)成 Visual C+, 它充其量只是 Visual C+的一個(gè)殼子而已。這一點(diǎn)請(qǐng)切記! 2 MFC 從理論上來講, MFC 也不是專用于 Visual C+, Borland C+, C+Builder 和Symantec C+同樣可以處理 MFC。同時(shí),用 Visual C+編寫代碼也并不意味著一定要用 MFC,只要愿意,用 Visual C+來編寫 SDK 程序,或者使用 STL, ATL,一樣沒有限制。不過, Visual C+本來就是為 MFC 打造的, Visual C+中的許多特征和語武漢理工大學(xué) 學(xué)士學(xué)位 論文 8 言擴(kuò)展也 是為 MFC 而設(shè)計(jì)的,所以用 Visual C+而不用 MFC 就等于拋棄了 Visual C+中很大的一部分功能。但是, Visual C+也不等于 MFC。 3 Platform SDK 這才是 Visual C+和整個(gè) Visual Studio 的精華和靈魂,雖然我們很少能直接接觸到它。大致說來, Platform SDK 是以 Microsoft C/C+編譯器為核心(不是 Visual C+,看清楚了),配合 MASM,輔以其他一些工具和文檔資料。上面說到 Developer Studio沒有編譯程序的功能,那 么這項(xiàng)工作是由誰來完成的呢?是 CL,是 NMAKE,和其他許許多多命令行程序,這些我們看不到的程序才是構(gòu)成 Visual Studio 的基石。 要想 學(xué)好 VC+需要有好的 C/C+基礎(chǔ),學(xué)習(xí) visual C+集成環(huán)境 , 理解 Windows的消息機(jī)制,一定要理解 MFC 中消息映射的作用 ,記住一些常用的消息名稱和參數(shù)的意義。 并且要善于利用向?qū)А?向?qū)且粋€(gè)通過一步步的幫助引導(dǎo)你工作的工具。 Developer Studio 中包含三個(gè)向?qū)?,用來幫助程序員開發(fā)簡(jiǎn)單的 Windows 程序,它們是: (1)AppWizard:用來創(chuàng)建一個(gè) Windows 程序的基本框架結(jié)構(gòu)。 AppWizard 向?qū)?huì)一步步向程序員提出問題,詢問他所創(chuàng)建的項(xiàng)目的特征,然后 AppWizard 會(huì)根據(jù)這些特征自動(dòng)生成一個(gè)可以執(zhí)行的程序框架,程序員然后可以在這個(gè)框架下進(jìn)一步填充內(nèi)容。 AppWizard 支持三類程序:基于視圖 /文檔結(jié)構(gòu)的單文檔應(yīng)用、基于視圖 /文檔結(jié)構(gòu)的多文檔應(yīng)用程序和基于對(duì)話框的應(yīng)用程序。也可以利用 AppWizard 生成最簡(jiǎn)單的控制臺(tái)應(yīng)用程序(類似于 DOS 下用字符輸入輸出的程序)。 (2)ClassWizard:用來定義 AppWizard 所創(chuàng)建的程序中的類??梢岳?ClassWizard在項(xiàng)目中增加類、為類增加處理消息的函數(shù)等。 ClassWizard 也可以管理包含在對(duì)話框中的控件,它可以將 MFC 對(duì)象或者類的成員變量與對(duì)話框中的控件聯(lián)系起來。 (3)ActiveX Control Wizard:用于創(chuàng)建一個(gè) ActiveX 控件的基本框架結(jié)構(gòu)。 ActiveX控件是用戶自定義的控件,它支持一系列定義的接口,可以作為一個(gè)可再利用的組件。 2.1.1 MFC 工程文件中自動(dòng)生成類 我所做系統(tǒng)是基于 MFC 的 C+編程。 創(chuàng)建一個(gè) MFC 工程文件后 , 會(huì)自動(dòng)生成幾個(gè) 類,分別為: (1)CmainFrame 主框架窗口類 : 從 MFC 的 CFrameWnd 框架窗口類派生,對(duì)應(yīng)于主窗口,管理主程序窗口,包含菜單、工具條、狀態(tài)條的設(shè)定等 。 此系統(tǒng)有用到工具條。 (2)CGraphicsApp 應(yīng)用程序類: 從 MFC 的 CWinApp Windows 應(yīng)用程序類派生,對(duì)應(yīng)于應(yīng)用程序,用來控制應(yīng)用程序的所有對(duì)象(文檔、視圖以及邊框窗口),并完成應(yīng)用程序的初始化和最后的清除工作。在一個(gè)程序執(zhí)行時(shí),系統(tǒng)首先創(chuàng)建一個(gè)應(yīng)用程序?qū)ο?,然后?duì)該對(duì)象進(jìn)行初始化操作。一般將應(yīng)用程序運(yùn)行過程中 需記錄的變量定義為本類的屬性,將應(yīng)用程序中關(guān)系到整個(gè)應(yīng)用程序的菜單的響應(yīng)程序等寫在本類中。我所做的系統(tǒng)對(duì)武漢理工大學(xué) 學(xué)士學(xué)位 論文 9 此類也沒有編寫代碼。 (3)CGraphicsDoc 文檔類: 從 MFC 的 CDocument 文檔類派生,對(duì)應(yīng)于應(yīng)用程序所處理的文檔,用于存取文檔數(shù)據(jù),一般將對(duì)文檔的修改程序?qū)懺诒绢愔?,通常將?yīng)用程序中 “編輯 ”等菜單的響應(yīng)程序?qū)懺诒绢愔?。本系統(tǒng)沒有用到文檔所以沒有對(duì)此類編碼。 (4)CGraphicsView 視圖類: 從 MFC 的 CView 視圖類派生,對(duì)應(yīng)于應(yīng)用程序所顯示的視圖,用來顯示文檔數(shù)據(jù),處理用戶輸入和管 理視圖窗口,一般將所有與輸入、顯示及打印有關(guān)的操作寫在本類中,通常將應(yīng)用程序中 “視圖 ”菜單的響應(yīng)程序?qū)懺诒绢愔小?此系統(tǒng)的代碼幾乎都是在此類中,所以對(duì)本系統(tǒng)來說此類非常重要。 (5) CAboutDlg“關(guān)于 ”對(duì)話框類: 從 MFC 的 CDialog 派生,一般不需對(duì)其增寫程序,每當(dāng)加入一個(gè)新的對(duì)話框時(shí),系統(tǒng)就會(huì)從 CDialog 類派生出一個(gè)新的類,供編程這在其中編寫此對(duì)話框的處理程序。本系統(tǒng)中沒有用到對(duì)話框,所以末對(duì)此類進(jìn)行編碼。 2.1.2 使用點(diǎn)、刷子、筆 、位圖 在本系統(tǒng)中,行星的軌道是自己畫出來的所以要學(xué)習(xí)如何 用刷子,筆進(jìn)行繪制橢圓。用位圖處理顯示圖片。 CDC:設(shè)備文本(或者設(shè)備描述表),從 CObject 類派生,是 Windows 應(yīng)用程序與設(shè)備驅(qū)動(dòng)程序與輸出設(shè)備之間的連接橋梁。所有的繪圖函數(shù)都在 CDC 類中定義。在視圖客戶區(qū)中進(jìn)行繪制的設(shè)備文本類是從 CDC 派生的 CClientDC 類。 CClientDC:是 CDC 的派生類,對(duì)應(yīng)于特定窗口的用戶區(qū),可用窗口對(duì)象指針初始化對(duì)象,如: CClientDC dc(this); 即用當(dāng)前窗口對(duì)象指針 this 對(duì) CClientDC 對(duì)象 dc 進(jìn)行初始化 。 CRect:用來表示矩形的類 ,擁有四個(gè)成員變量: top left bottom right。分別表示左上角和右下角的坐標(biāo)。可以通過以下的方法構(gòu)造: CRect(int l,int t,int r,int b),其中的 l, t, r, b 分別指明 Crect 的四個(gè)頂點(diǎn)坐標(biāo)。 其成員函數(shù)主要為: int Width( ) const; 得到寬度 int Height( ) const; 得到高度 CSize Size( ) const; 得到尺寸 CPoint& TopLeft( ); 得到左上角坐標(biāo) CPoint& BottomRight( ); 得到右下角坐標(biāo) CPoint CenterPoint( ) const; 得到中心坐標(biāo) CRect 可以用來定義一個(gè)矩形區(qū)域,在畫橢圓的時(shí)候會(huì)用到。 CPen:定義畫筆類型,通過 SelectObject(&pen)為 DC 選擇畫筆對(duì)象。 畫筆決定所畫圖形的線條的樣式。 CBrush: 畫刷。 如果需要用顏色或者圖案對(duì)一個(gè)封閉的圖形內(nèi)部進(jìn)行填充 ,就要使用畫刷 ,畫刷是 CBrush 類的對(duì)象 ,明智來填充封閉圖形內(nèi)部的工具 。 武漢理工大學(xué) 學(xué)士學(xué)位 論文 10 CBitmap: 位圖。 類 CBitmap 封裝了 Windows 圖形設(shè)備接 口( GDI)中的位圖,并且提供了操縱位圖的成員函數(shù)。使用 CBitmap 對(duì)象之前要先構(gòu)造 CBitmap 對(duì)象,調(diào)用其中的一個(gè)初始化成員函數(shù)設(shè)置位圖對(duì)象的句柄。此后就可以調(diào)用其它成員函數(shù)了。 宏 RGB:用來定義顏色,包括紅,綠,藍(lán)三種顏色分量,取值范圍為 (0 255), 例如:RGB(0, 0, 0)為黑色, RGB(255, 255, 255)為白色。 用以設(shè)置填充色。 2.2 太陽系簡(jiǎn)介 太陽系( solar system)就是我們現(xiàn)在所在的恒星系統(tǒng)。 主要 由太陽、 8 顆大行星(原先有九大行星,因?yàn)橼ね跣潜惶蕹秊榘行牵?以及無數(shù)的小行星、彗星及隕星 所組成。 行星由太陽起往外的順序是:水星( mercury)、金星( venus)、地球( earth)、火星( mars)、木星 (jupiter)、土星( saturn)、天王星( uranus)、海王星( neptune)。 這些行星都以太陽為中心以橢圓軌道公轉(zhuǎn),雖然除了水星的十分接近于圓。行星軌道中或多或少在同一平面內(nèi)(稱為黃道面并以地球公轉(zhuǎn)軌道面為基準(zhǔn))。黃道面與太陽赤道僅有 7 度的傾斜。冥王星的軌道大都脫離了黃道面,傾斜度達(dá) 17 度。 太陽系中的八大行星都朝同一方向繞太陽公轉(zhuǎn)。除金星以外,其他 行星的自轉(zhuǎn)方向和公轉(zhuǎn)方向相同。 水星 ::平均日距 57,910,000 km (0.38 天文單位 ) , 直徑 4,878 km , 質(zhì)量 3.30e23 kg ,密度 5.43 gm/cm , 重力 0.376 G , 公轉(zhuǎn) 87.97 地球天 。 金星: 平均日距 108,200,000 km (0.72 天文單位 ) , 直徑 12,103.6 km , 質(zhì)量 4.869e24 kg , 密度 5.24 gm/cm, 重力 0.903 G , 公轉(zhuǎn) 224.7 地球天 。 地球: 平均日距 149,600,000 km (1.00 天文單位 ) , 直徑 12,756.3 km , 質(zhì)量 5.976e24 kg, 密度 5.52 gm/cm, 重力 1 G(9.8 m/s2) , 公轉(zhuǎn) 365.26 地球天 。 火星:平均日距 227,940,000 km (1.52 天文單位 ), 直徑 6,794 km, 質(zhì)量 6.4219e23 kg,密度 3.94 gm/cm, 重力 0.38 G, 公轉(zhuǎn) 686.98 地球天 。 木星:平均日距 778,330,000 km (5.20 天文單位 ), 直徑 142,984 km (equatorial), 質(zhì)量 1.900e27 kg, 密度 1.31 gm/cm, 重力 2.34 G, 公轉(zhuǎn) 11.86 地球年 。 土星:平均日距 1,429,400,000 km (9.54 天文單位 ), 直徑 120,536 km (equatorial), 質(zhì)量 5.688e26 kg , 密度 0.69 gm/cm, 重力 1.16G, 公轉(zhuǎn) 29.46 地球年 。 天王星:平均日距 2,870,990,000 km (19.218 天文單位 ), 直徑 51,118 km (equatorial),質(zhì)量 8.686e25 kg, 密度 1.28 gm/cm, 重力 1.15G, 公轉(zhuǎn) 84.81 地球年 。 海王星: 平均日距 4,504,000,000 km (30.06 天文單位 ),行 星直徑: 49,532 km,質(zhì)量 : 1.0247e26 千克 (為地球質(zhì)量的 17.22 倍) , 公轉(zhuǎn)周期:約 164.8 個(gè)地球年 平均密度:1.66g/cm3。武漢理工大學(xué) 學(xué)士學(xué)位 論文 11 3 系統(tǒng)總體設(shè)計(jì) 3.1 功能設(shè)計(jì) 第一:系統(tǒng)是單用戶的,這里的單用戶是指不需要用戶名和密碼 , 用戶進(jìn)入系統(tǒng)可以直接對(duì) 系統(tǒng) 進(jìn)行操作 。第二: 系統(tǒng)有多視角 。第三:太陽系是可以放大、縮小的 ,并且保證放大、縮小后行星照樣能正確的運(yùn)行 。第四 : 太陽系可以進(jìn)行上、下、左、右的平移,并且平移后行星照樣能正確地運(yùn)行。 第五:有專門的初始化工具。 第六:有對(duì)應(yīng)的工具按鈕。 系統(tǒng)為模擬系統(tǒng),外觀要逼真才比較好,所以我需要從網(wǎng)下下載關(guān)于行星的圖片,這樣看起來比較逼真。真實(shí)的太陽系是三維空間的,不同的視角下觀看的結(jié)果是不一樣的,所以在 系統(tǒng)要實(shí)現(xiàn) 從 二種視角來觀看太陽系,分別為:俯視和側(cè)視。這二種視角看到太陽系的感覺是完全不一樣的。選定了一種視角后就可以在這種視角下觀看太陽系各行星的運(yùn)行,當(dāng)然也可以放大,縮小,左(右,上,下)移動(dòng)整個(gè)太陽系,在太陽系運(yùn)行過程中,當(dāng)然 也可以來暫停行星的運(yùn)行,使太陽系處于靜止?fàn)顟B(tài),再次點(diǎn)擊運(yùn)行行星會(huì)接著動(dòng)起來。如果想回到最初狀態(tài),也可以點(diǎn)一下復(fù)原按鈕,整個(gè)太陽系又回到了此視角下的最初始的狀態(tài)。如果想換個(gè)換角來看太陽系,直接點(diǎn)擊你想要的視角的按鈕,這二種視角下可以行使的功能是一樣的。 根據(jù)功能的劃分,我將系統(tǒng)劃分為以下 9 個(gè)功能模塊 和二大界面 ,以及在工具欄上設(shè)置工具按鈕 。 圖 1 系統(tǒng) 模塊 圖 太陽 側(cè)視模塊 俯視模塊 平移模塊 放大縮小模塊 運(yùn)動(dòng)靜止 模塊 還原 模塊 平移模塊 放大縮小模塊 運(yùn)動(dòng)靜止 模塊 還原 模塊 武漢理工大學(xué) 學(xué)士學(xué)位 論文 12 3.2 系統(tǒng)界面設(shè)計(jì) 3.2.1側(cè) 視界面 在此種界面下的視覺像是在太陽系的旁邊觀看太陽系運(yùn)行,給人 一種立體的感覺。在對(duì)圖像進(jìn)行處理的時(shí)候,前面的像要擋住后面的像,這樣可以出現(xiàn)立體的效果。 3.2.2 俯 視界面 在此種界面下的視覺像是在太陽系的正上方觀看太陽系運(yùn)行。此時(shí)各個(gè)軌道看起來像是一系列同心的橢圓,各行星在上面運(yùn)行時(shí)不會(huì)出現(xiàn)遮擋的效果??雌饋頉]有側(cè)視有立體感。 3.2.3 工具條 工具條里面存放各種功能的工具,方便用戶的操作,實(shí)現(xiàn)交互。當(dāng)然如果不想點(diǎn)擊工具欄上的按鈕的話,也可以通過相應(yīng)的鍵來實(shí)現(xiàn)相應(yīng)的功能,具體各功能對(duì)應(yīng)什么鍵在下面的模塊設(shè)計(jì)中有詳細(xì)介紹。 3.3 系統(tǒng)模塊設(shè)計(jì) 3.3.1放大模塊 功能:放 大 整個(gè)太陽系,并保證放大后行星依然可以正確地在軌道上運(yùn)行。 在工具條上設(shè)置此功能相應(yīng)的工具,并且可以用 HOME 鍵來進(jìn)行觸發(fā)。 3.3.2 縮小模塊 功能: 縮小整個(gè)太陽系,并保證縮小后行星依然能正確地在軌道上運(yùn)行。 在工具條上設(shè)置此功能對(duì)應(yīng)的工具,并且可以用 END 鍵來進(jìn)行觸發(fā)。 3.3.3 左移模塊 功能:左移整個(gè)太陽系,并保證左移后行星依然能正確地在軌道上運(yùn)行。 在工具條上設(shè)置此功能對(duì)應(yīng)的工具,并且可以用左光標(biāo)鍵來進(jìn)行觸發(fā)。 3.3.4 右移模塊 功能:右移整個(gè)太陽系,并保證右移后行星依然能正確地在 軌道上運(yùn)行。 在工具條上設(shè)置此功能對(duì)應(yīng)的工具,并且可以用右光標(biāo)鍵來進(jìn)行觸發(fā)。 武漢理工大學(xué) 學(xué)士學(xué)位 論文 13 3.3.5 上移模塊 功 能:上移整個(gè)太陽系,并保證上移后行星依然能正確地在軌道上運(yùn)行。 在工具條上設(shè)置此功能對(duì)應(yīng)的工具,并且可以用上光標(biāo)鍵來進(jìn)行觸發(fā) 。 3.3.6 下移模塊 功 能:下移整個(gè)太陽系,并保證下移后行星依然能正確地在軌道上運(yùn)行。 在工具條上設(shè)置此功能對(duì)應(yīng)的工具,并且可以用下光標(biāo)鍵來進(jìn) 行觸發(fā)。 3.3.7 運(yùn)行模塊 功能:運(yùn)行此模塊時(shí),行星可以在自自的軌道上運(yùn)行 在工具條上設(shè)置相應(yīng)的工具,并且可以用回車鍵來進(jìn)行觸發(fā) 。 3.3.8 暫停模塊 功 能:運(yùn)行此模塊時(shí),行星可以停住。 在工具條上設(shè)置相應(yīng)的工具,并且可以用空格鍵來進(jìn) 行觸發(fā)。 3.3.9 還原模塊 功能:運(yùn)行此模塊時(shí),可以將太陽系還原來初始狀態(tài)。 在工具條上設(shè)置相應(yīng)的工具,并且可以用 Delete 鍵來進(jìn)行觸發(fā) 。 3.4 測(cè)試設(shè)計(jì) 測(cè)試主要圍繞行星是否能準(zhǔn)確在軌道上運(yùn)行來進(jìn)行,首先看在初始化妝態(tài)行星是否準(zhǔn)確運(yùn)行,切換視角后能否正準(zhǔn)運(yùn)行,對(duì)太陽系進(jìn)行上下左右平移變換后是否能準(zhǔn)確運(yùn)行,進(jìn)行放大縮小變換后是否能準(zhǔn)確運(yùn)行, 并且在這些情況下是不是能讓運(yùn)行的行星停下來,能讓靜止的行星運(yùn)動(dòng) 起來。 武漢理工大學(xué) 學(xué)士學(xué)位 論文 14 4 系統(tǒng)界面設(shè)計(jì) 4.1 側(cè)視 界面 4.1.1 過程設(shè)計(jì) 側(cè)視 界面 組成: 界面有太陽圖片,九大行星圖片,以及背景圖片,以及自己所繪橢圓行星軌道所組成。 主要 思想: ( 1) 映射模式: MM TEXT。 在此映射模式下,坐標(biāo)被映射到了象素,X 值向右方向遞增, Y 值向下遞增,所以用它來表示設(shè)備坐標(biāo)系是再合適不過了。 ( 2) 軌道: 行星的運(yùn)行軌道是用 GDI 對(duì)象畫出來的。畫軌道時(shí)用到的 GDI 對(duì)象有 :CBrush,刷子定義了一種位圖形式的象素,得用它可對(duì)域內(nèi)部填充 顏色; CPen,筆是一種用來畫線及繪制有形邊框的工具, 我們可以指定它的顏色及厚度,并且可以指定它畫實(shí)線,點(diǎn)線或虛線 。 可以自己構(gòu)造一個(gè) CGdiObject 派生類的對(duì)象, 用 SelectObject()將自己構(gòu)造的對(duì)象選進(jìn)來;也可以使用庫(kù)存的 GDI 對(duì)象,用 SelectStockObject()選入。在選進(jìn)自己的 GDI 對(duì)象的同時(shí),須將原來的 GDI 對(duì)象也保存起來,當(dāng)任務(wù)完成后,再將原來的對(duì)象恢復(fù),這樣就可以將自己的 GDI 對(duì)象刪除。 當(dāng)然也可以使用另外一種更加方便的方法:可以直接選擇庫(kù)存的 GDI 對(duì)象,這樣原來的對(duì)象將會(huì)被自動(dòng)分離出來。 ( 3) 圖片: 將基于資源的 圖片 轉(zhuǎn)換成 GDI 位圖來進(jìn)行處理, GDI 位圖只不過是另外一種 GDI 對(duì)象。首先,我們必須創(chuàng)建一個(gè)位圖,然后再把它選進(jìn)設(shè)備環(huán)境中,當(dāng)我們使用完了以后,還必須將它從設(shè)備環(huán)境中選出來,然后再把它刪掉。在顯示位圖的時(shí)候,我們必須先利用函數(shù) CDC: CreateCompatibleDC,為位圖創(chuàng)建一個(gè)特殊的內(nèi)存設(shè)備環(huán)境,然后再利用 CDC 的 StretchBlt 成員函數(shù),將內(nèi)存設(shè)備環(huán)境中的各

溫馨提示

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

評(píng)論

0/150

提交評(píng)論