




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、本 科 畢 業(yè) 設(shè) 計(論 文)學(xué)院(部)數(shù)學(xué)科學(xué)學(xué)院題 目日出日落時間以及月相月相查詢系統(tǒng)設(shè)計年 級2014級專業(yè)信息與計算科學(xué)班 級信息與計算科學(xué)學(xué)號1407405030姓 名徐林欽指導(dǎo)老師劉楓職稱講師論文提交日期26日出日落時間以及月相查詢系統(tǒng)設(shè)計摘要日月變換是生活中常見的兩種天文現(xiàn)象,日出日落與人們的生活作息密切相關(guān),而月相中的朔望月是中國農(nóng)歷制定的基礎(chǔ)。本文在前人的研究基礎(chǔ)上,利用數(shù)值逼近的方法計算了各緯度的日出日落時間,并且在elp-2000/82月球運行理論的基礎(chǔ)上,以特征月相出現(xiàn)的時間為基準點得到各地不同時間的月相。最后設(shè)計了能夠查詢一個日出日落時間以及月相的系統(tǒng)。該系統(tǒng)以網(wǎng)頁
2、形式呈現(xiàn),并且模擬了該系統(tǒng)在服務(wù)器上發(fā)布以及通過客戶端訪問的過程。關(guān)鍵詞:日出日落時間,月相,算法abstractthe change of the sun and the moon is the two common astronomical phenomenon in life. the sunrise and sunset are closely related to the life of the people, and both the new moon and the full moon, which are a kind of phrases of the moon, is th
3、e basis for the chinese lunar calendar. on the basis of previous studies, this paper uses the method of numerical approximation to calculate time of the sunrise and sunset of each latitude, and on the basis of the theory of elp-2000/82 lunar operation, the phase of different locations, different tim
4、e is obtained based on the occurrence time of characteristic moon phases. finally, a system for querying a sunrise, sunset time and moon phase is designed. the system is presented in form of webpage, and it simulates the process of the system being released on the server and accessed through the cli
5、ent.keywords: the times of sunrise and sunset; phrases of the moon; algotithm目錄第1章前言31.1背景知識31.2研究現(xiàn)狀3第2章 系統(tǒng)設(shè)計42.1 系統(tǒng)設(shè)計目標(biāo)42.2 需求分析42.2.1 輸入輸出分析42.2.2 數(shù)據(jù)處理流程分析52.3 詳細設(shè)計52.3.1 數(shù)據(jù)類的設(shè)計52.3.2 日出日落時間計算62.3.3 月相計算82.3.4 網(wǎng)頁設(shè)計11第3章 模擬發(fā)布11第4章 改進措施及設(shè)想13第5章 總結(jié)13主要參考文獻14致謝14附錄15第1章 前言1.1 背景知識在我國古代,人們遵循著“日出而作,日落而息
6、”的作息規(guī)律,在年復(fù)一年對日月運行規(guī)律的觀察下,先人們制定了兼有陽歷年和陰歷月的歷法,稱為中國農(nóng)歷。中國農(nóng)歷是陰陽合歷,在制定的時候需要同時考慮太陽和月亮的位置,是對日月運行規(guī)律的一種反映。比如,中國農(nóng)歷中二十四節(jié)氣的變化就是一種對太陽運行規(guī)律的反映,而農(nóng)歷中最基礎(chǔ)的農(nóng)歷月則是根據(jù)月相的變化規(guī)律制定的,嚴格地以日月合朔,即新月發(fā)生的時刻作為農(nóng)歷月中的初一。此外,在當(dāng)代城市發(fā)展過程中,道路系統(tǒng)是必不可少的,那么道路照明系統(tǒng)的重要性不言而喻,在設(shè)計城市道路照明系統(tǒng)的過程中,為了保證安全性,需要在日落之前打開路燈,日出之后關(guān)閉路燈,此外,在最大化利用資源的同時,又需要保證路燈開關(guān)時間與日落日出時間相
7、差不大。再者,各城市地理位置不同,導(dǎo)致了日出日落時間不同,因此,如何計算不同地理位置不同日期下的日出日落時間是設(shè)計智能路燈控制系統(tǒng)的關(guān)鍵。1.2 研究現(xiàn)狀日出日落以及月相變化作為最常見的天文現(xiàn)象,在很久之前,人們就已經(jīng)對其變化規(guī)律有過深入研究,尤其是天文技術(shù)得到充分發(fā)展的當(dāng)代,其變化規(guī)律已不再是什么秘密。如在vsop行星理論體系中給出了計算行星日心黃經(jīng)的周期項系數(shù)表(l表)、計算行星日心黃緯的周期項系數(shù)表(b表)和計算行星和太陽距離的周期項系數(shù)表(r表),將這個理論應(yīng)用在地球上,可以計算出某個時間太陽相對地球的位置,在這個基礎(chǔ)上可以計算出日出日落時間。在研究地月關(guān)系上,應(yīng)用比較廣泛的是elp2
8、000-82月球理論體系,該理論是m. chapront-touze和j. chapront在1983年提出的一個月球位置的半解析理論,和其它的半解析理論一樣,這個理論也包含一套計算方法和相應(yīng)的迭代周期項。elp-2000/82月球理論共包含37862個周期項,其中20560個用于計算月球經(jīng)度,7684個用于計算月球緯度,9618個用于計算地月距離。該理論被提出之后,出現(xiàn)了很多基于該理論的改進或簡化理論,astronomical algorithms一書的第四十五章就介紹了基于該理論的一種改進算法,其周期項參數(shù)都是從elp-2000/82理論的周期項參數(shù)轉(zhuǎn)換來的,并且忽略了影響比較小的周期項。
9、用該方法計算出來的月球黃經(jīng)精度只有10,月球黃緯精度只有4”,但是在以天為單位查詢月相時,這樣的精度已經(jīng)足夠,更何況這種方法計算速度還很快。在本文所設(shè)計的日出日落時間以及月相查詢系統(tǒng)中,使用了一種已經(jīng)成功應(yīng)用在城市路燈監(jiān)控系統(tǒng)中的計算方法來計算日出日落時間,而對于如何計算月相,采用了astronomical algorithms一書中計算特征月相(即新月,半滿上下弦月和滿月)的算法,在此基礎(chǔ)上計算某個時間段的月相。第2章 系統(tǒng)設(shè)計2.1 系統(tǒng)設(shè)計目標(biāo)日出日落時間以及月相查詢系統(tǒng)主要功能是能夠查詢不同地理位置下的不同日期的日出日落時間以及當(dāng)天的月相。該系統(tǒng)在形式上設(shè)計為一組網(wǎng)頁,即一個網(wǎng)站。并且
10、該系統(tǒng)可以根據(jù)輸入的不同經(jīng)緯度以及日期反饋出相應(yīng)的正確結(jié)果,并且所得結(jié)果與真實值誤差不能太大。當(dāng)該系統(tǒng)設(shè)計完畢之后,將網(wǎng)站發(fā)表于服務(wù)器上,并且能夠通過客戶端的瀏覽器訪問該網(wǎng)站。由于條件所限,該過程也可以通過利用pc機作為模擬服務(wù)器,通過瀏覽器訪問該網(wǎng)頁。由于jsp頁面可以被預(yù)編譯,且能夠很容易的和靜態(tài)模板(如html)結(jié)合以及開發(fā)者很容易對源代碼進行更新,故利用jsp技術(shù)進行網(wǎng)站的設(shè)計。在編譯器方面,選擇使用eclipse這一軟件,并且在其上加載tomcat組件,這可以很容易地在設(shè)計過程中模擬網(wǎng)站發(fā)布之后的狀態(tài),便于網(wǎng)站的測試和修改。在網(wǎng)站設(shè)計結(jié)束之后的模擬測試上,同樣選擇tomcat作為模擬
11、服務(wù)器進行測試,具體配置過程見第三章。2.2 需求分析2.2.1 輸入輸出分析由于該系統(tǒng)可以根據(jù)不同地理位置以及日期給出相對應(yīng)的日出日落時間以及月相,可以得知該系統(tǒng)的輸入至少有兩個:經(jīng)緯度以及日期情況,輸出應(yīng)該為當(dāng)?shù)厝粘鋈章鋾r間以及對應(yīng)月相。該過程在網(wǎng)站中表現(xiàn)為如何利用網(wǎng)頁收集數(shù)據(jù),對此,仿效一些網(wǎng)站登錄界面的設(shè)計,使用表單傳遞數(shù)據(jù)(即經(jīng)緯度和日期)。然后在其他的jsp頁面處理所獲得的數(shù)據(jù),通過計算獲得日出日落時間以及月相,并在網(wǎng)頁上打印出來。2.2.2 數(shù)據(jù)處理流程分析獲得確定的經(jīng)緯度以及日期之后,需要根據(jù)已有的算法給出日出日落時間以及月相。但是經(jīng)緯度和日期可以有很多種表示方式,為了簡化系統(tǒng)
12、的設(shè)計,需要對輸入的格式作出一些限制。比如將東西經(jīng)和南北緯用地理上標(biāo)準表示法代替,將具體度數(shù)統(tǒng)一化為以度為單位以及限定輸入的日期格式。由于表單傳遞的數(shù)據(jù)格式一般為文本格式(可視作字符串處理),在算法過程中需要將這些數(shù)據(jù)轉(zhuǎn)化為數(shù)字格式并且考慮到有其他操作的可能,所以直接建立兩個數(shù)據(jù)類,在類里面定義處理文本數(shù)據(jù)(也即字符串)的方法以及其他可能用到的所有方法。將經(jīng)緯度以及日期格式化之后,通過引用計算日出日落時間和月相的算法給出最終的結(jié)果。為了保證jsp頁面的簡潔以便于擴展和維護,將動態(tài)部分的算法(這里指計算日出日落時間以及月相的算法)寫成一個java類,并利用javabean技術(shù)在jsp頁面中使用涉
13、及到的所有類。2.3 詳細設(shè)計2.3.1 數(shù)據(jù)類的設(shè)計在需求分析中我們經(jīng)過分析知道需要設(shè)計兩個數(shù)據(jù)類用來格式化表單傳遞的文本數(shù)據(jù)。由于表單傳遞的數(shù)據(jù)類型為字符串,在這兩個數(shù)據(jù)類中需要將字符串轉(zhuǎn)化為對應(yīng)的數(shù)據(jù)。我們假設(shè)將地理位置存儲在geopoint類中,將時間信息存儲在date類中。在類geopoint中必須有屬性表示經(jīng)度和緯度,分別命名為glong和glat,對于如何區(qū)分南北緯和東西經(jīng),我們假定北緯和東經(jīng)數(shù)值為正,否則數(shù)值為負數(shù)。在類date中,需要有表示年月日的基本屬性分別命名為year,month,monthday,若需要對該類進行擴充以表示更加準確的時間可額外加上hour,minute
14、,second等屬性表示一天中的時分秒。在這兩個數(shù)據(jù)類中,需要定義方法,將表單傳遞的字符串類型的數(shù)據(jù)轉(zhuǎn)化為數(shù)字類型的數(shù)據(jù),假定表單傳遞過來的地理位置信息為“40n120e”,時間信息為“2001-1-1”,經(jīng)過初始化之后,在類geopoint中,glong值為120,glat值為40,具體過程為:將字符串做為一個字符數(shù)組,分別提取數(shù)字和字母,以字母做為正負標(biāo)志,然后給對應(yīng)屬性賦值;在類date中,year值為2001,month值為1,monthday值為1,其他一些屬性默認為0,具體算法為:利用java字符串分割方法spring.split(),以“-”做為分割符分割字符串,得到年月日對應(yīng)的
15、字符串,最后轉(zhuǎn)化為數(shù)字,給對應(yīng)屬性賦值。此外,在數(shù)據(jù)類中,可以根據(jù)其他的要求設(shè)計一些特殊的方法,比如在天文計算方面常常會涉及到天文儒略日的計算。所以在date類中預(yù)先設(shè)計將格里歷(即我們所說的公元紀年)轉(zhuǎn)化為儒略日期的方法如下:設(shè)y 為給定年份,m 為月份,d 為該月日期。一般來說,如果所求日期精確到某天的具體時間的時候,將不足一天的時間長度化作以天為單位的小數(shù)。也就是說d是帶小數(shù)的該月日期。若m > 2,y 和m 不變,若 m =1 或2,以y1 代y,以m+12 代m,換句話說,如果日期在1 月或2 月,則被看作是在前一年的13 月或14 月。對格里高利歷有:a = int(y/10
16、0)b=2-a+int(a/4)對儒略歷,取b = 0所要求的儒略日即為: 該方法可用于計算正數(shù)年和負數(shù)年的儒略日期。該方法在astronomical algorithms一書的第七章可以找到。1具體的數(shù)據(jù)類的代碼見附錄geopoint和time。2.3.2 日出日落時間計算一般地,人們把太陽從地平線升起的時刻定義為日出時刻,太陽從地平線落下的時刻定義為日落時刻。但是由于大氣折射的影響,此時太陽的實際位置在地平線之下。這也是導(dǎo)致北半球日落最早時刻在12月初而不是冬至日,日出最早時刻在6月初而不是夏至日的原因。因此,在計算日出日落時間的時候需要考慮到大氣折射導(dǎo)致的誤差。下面這個計算模型通過引入日
17、出日落時刻太陽相對參考平面的角度修正了大氣折射對結(jié)果的影響。首先,假設(shè)地球為球形,日出日落時圓盤形太陽的上沿剛好到達地平線,此時,以觀察者所在地平面為參考面,太陽位置為-0.833°(計算時間時采用時間角計算方式,即180°=12h)。2計算日出日落時刻時,首先假設(shè)太陽位置為12h即180°,用這個進行第一次運算,然后將計算之后的結(jié)果作為新的太陽位置,再次代入迭代,直到符合要求(即滿足要求的精度)。具體步驟如下:已知:日出日落時太陽的位置h-0.833°,要計算地點的地理位置,經(jīng)度long,緯度g1at,時區(qū)zone,uto為上次計算的日出日落時間,第一
18、次計算時uto180°。(1)先計算出從格林威治時間公元2000年1月1日到計算日天數(shù)days(可以將其看做以2000年1月1日為起點的儒略日期,以便于計算2000年之前的日期到2000年1月1日的天數(shù),以負數(shù)表示); (2)計算從格林威治時間公元2000年1月1日到計算日的世紀數(shù)t, 則 (3)計算太陽的平黃徑 : (4)計算太陽的平近點角 : (5)計算太陽的黃道經(jīng)度 : (6)計算地球的傾角 (7)計算太陽的偏差 (8)計算格林威治時間的太陽時間角gha:(9)計算修正值e:令 則e的計算方法如下: (10)計算新的日出日落時間: (其中“+”表示計算日出時間,“-”表示計算日
19、落時間) (11)比較uto和ut之差的絕對值,如果大于0.1°即0.007小時,把ut作為新的日出日落時間值,重新從第(2)步開始進行迭代計算,如果uto和ut之差的絕對值小于0.007小時,則ut即為所求的格林威治日出日落時間; (12)上面的計算以度為單位,即180°=12小時,因此需要轉(zhuǎn)化為以小時為單位表示的時間,再加上所在的時區(qū)數(shù)zone,即要計算地點的日出日落時間為: 本文在設(shè)計查詢系統(tǒng)時默認為北京時間,即zone默認為8。2該方法在計算中低緯度的日出日落時間時準確度很高,計算高緯度日出日落時間時結(jié)果誤差大于中低緯度。當(dāng)計算位置位于西半球或者南半球時經(jīng)度long
20、為負數(shù),緯度glat為負數(shù)。該方法誤差已被證實相差結(jié)果不到1分鐘。3將該方法用java語言寫出具體的實現(xiàn)過程。在java中,寫一個日出日落時間計算函數(shù)實質(zhì)上是寫一個所有過程函數(shù)(指計算中間參數(shù)的方法)構(gòu)成的計算類,設(shè)這個類的類名為sunriseset。對上述算法的過程實現(xiàn)如下(具體代碼見附錄sunriseset):(1) 計算到公元2000年1月1日天數(shù),為了方便計算,我們在計算過程中將日期轉(zhuǎn)化為儒略日期計算。因此,計算日期與2000年1月1日相差的天數(shù)就是兩者對應(yīng)的儒略日之差.(2) 按照算法步驟計算相關(guān)參數(shù),這部分基本上按照算法給出的公式計算即可。(3) 循環(huán)迭代求出ut。將每次求出的ut
21、作為uto重新開始計算,直到滿足精度要求,即相鄰兩次計算結(jié)果只差不超過0.1。在參考文獻2中給出了實現(xiàn)該算法的c+代碼,并且在csdn博客上也能夠找到實現(xiàn)該算法的java方法(具體地址見附錄sunriseset類)。然而,參考文獻中的代碼雖然簡潔但是存在一定的錯誤,例如在實現(xiàn)循環(huán)迭代這一過程時,其將ut的初值設(shè)為0,使得第一次迭代結(jié)束之后uto的值為0,而不是第一次迭代中計算得到的ut的值,這實際上是以初值為0開始迭代,而不是180。要解決這個問題只需要在循環(huán)迭代之前先進行一次迭代并判斷是否符合精度,若不符合則進入循環(huán)迭代的過程。在csdn博客上找到的代碼,其正確性已經(jīng)得到驗證,但是實現(xiàn)過程很
22、復(fù)雜,不利于閱讀和維護,并且觀其算法只能求解日期在2000年1月1日之后的某一天的日出日落時間。綜合以上兩種代碼優(yōu)缺點,我在設(shè)計系統(tǒng)的過程中,主要借鑒了參考文獻中的c+代碼,將其改寫成了java語言,并且在這個過程中修正了循壞迭代中的錯誤,并借鑒了儒略日期的計算過程,改進了計算天數(shù)部分的代碼,與csdn博客中的比較,該算法可以求解日期在2000年以前的某天的日出日落時間。經(jīng)過驗證,改進之后的算法誤差仍然在1分鐘以內(nèi)。該算法詳細實現(xiàn)代碼見附錄的sunriseset類。2.3.3 月相計算在考慮如何計算月相時,考慮了以下兩個模型:其一,月相的更替周期約為29.53天,如果能夠知道一個周期月相的變化
23、,那么只要確定某天的月相,便可以根據(jù)周期變化得到距離該日任意天數(shù)的月相;其二,假如知道一個月相周期以及如何計算新月發(fā)生時刻,計算距離待計算日期最近的新月發(fā)生時候,兩個時刻之差表示的就是新月發(fā)生時刻到所求月相經(jīng)過的時間,比如,新月發(fā)生在3月3日凌晨,那么3月4日凌晨的月相就是月相周期中在新月之后一天的月相,即我們所稱的娥眉月。考慮到我們計算月相以天為單位,如果要通過周期變化得到精確的結(jié)果,最小的月相周期應(yīng)為2953天的月相,周期跨度過長且無法找到相應(yīng)數(shù)據(jù),如果以29.5天作為一個周期,誤差隨著天數(shù)的增大而變大。因此,選擇模型二,并且為了減少天數(shù)相差過大所造成的誤差,計算一個月內(nèi)特征月相新月,半滿
24、上弦月,滿月,半滿下弦月發(fā)生時刻,以距離待計算日期最近標(biāo)志月相為基準點,通過時間差找到月相。下面給出計算月相的模型。首先是計算四個特征月相:新月,半滿上弦月,滿月,半滿下弦月,這四個特征月相發(fā)生時刻按照精確定義是指月亮視黃經(jīng)與太陽視黃經(jīng)相差為0°,90°,180°,270°的時刻。計算這些月相發(fā)生的時刻就需要計算日月視黃經(jīng)(可以忽略章動的影響,因為黃經(jīng)章動對星體影響一致,計算日月視黃經(jīng)之差時消去)。計算方法來自astronomical algorithms一書第四十七章1,其中的公式基于chapronts elp-2000/82 月亮理論,以及breta
25、gnon和francou的vsop行星理論的太陽計算部分。計算過程如下:(1) 計算特征月相發(fā)生時刻代表參數(shù)k, 其中year是帶小數(shù)點的十進制數(shù),例如1987.25表示1987 年3 月末(因為這0.25年是從1987年的年首起算的)。對計算所得k的值向下取整得到新月發(fā)生時刻,在此基礎(chǔ)上,k 的值增加了0.25,為平半滿上弦月時刻;增加了0.50,為平滿月時刻;增加了0.75,為平半滿下弦月時刻。(2) 計算從j2000.0起算的儒略世紀數(shù)t: t在j2000.0之前是負數(shù),(j2000.0表示2000年的儒略日期)(3) 計算平月相產(chǎn)生時間jde:(4) 計算jde時刻的角參數(shù):i. 太陽
26、的平近點角 ii. 月亮的平近點角 iii. 月亮的維度參數(shù) iv. 月亮軌道升交點經(jīng)度 v. 行星的參數(shù) (5) 視月修正參數(shù)的計算:一般我們所說的月相都是視月相,而在天文計算中往往得到的是平月相。通過周期項計算所得結(jié)果為平月相發(fā)生時刻,如果要得到視月相發(fā)生時刻,需要加上視月誤差。要計算真月相(視月相)發(fā)生的時刻,請對jde 加上下面的修正,以日為單位在半滿上弦月時,需要加上修正w,下弦時需要減去修正w,w的計算公式如下: 此外,計算所有月相的視月相時還需要加上修正量an/1000000,其中an為以下參數(shù)的和: 這樣我們就能夠給出特征月相(視月相)的具體發(fā)生時刻。我們計算某一天的月相,即月
27、相待定,但是知道該月相發(fā)生的時刻。在本次設(shè)計的月相查詢系統(tǒng)中,將一天的月相定義為該日零點時刻的月相。計算待定月相所在的月相周期的特征月相的發(fā)生時刻,計算待定月相發(fā)生時刻與四個時刻的日期差,找出絕對值最小的那一項以及對應(yīng)特征月相,待定月相即為距離該特征月相時間跨度為日期差的月相(日期差為負數(shù)表示待定月相在特征月相之前)。在實際設(shè)計過程中,不可能把每時每刻的月相全部錄入,因此選取一個月相周期中有代表性的月相(即以天為間隔選取月相),一共選取了30張月相圖片,按照月相變化順序排列并編號為1-30,其中首尾月相都是新月,這符合月相周期為29.53天這一特征。此時我們將所得日期差除以24小時四舍五入取整
28、,以此表示天數(shù)差。但是,考慮到計算特征月相的過程中存在誤差,也就是說通過兩個新月時刻差所得到的月相周期與真實月相變化周期相比存在誤差,為了減小誤差,我們需要修正日長時間,找到和待定月相相鄰的兩個特征月相的發(fā)生時刻,計算這兩個特征月相之間的日期差,并統(tǒng)計這兩個月相之間經(jīng)歷過的月相個數(shù)n,用/(n+1)來代替24小時作為日長作為分數(shù)來給出天數(shù)差,在這個基礎(chǔ)上找到月相編號。具體的實現(xiàn)代碼見附錄moonphrase。2.3.4 網(wǎng)頁設(shè)計在網(wǎng)頁設(shè)計上,只需要設(shè)計一個數(shù)據(jù)收集頁面和一個處理輸出頁面即可,此外還可以增加錯誤處理頁面比如404頁面。數(shù)據(jù)經(jīng)由收集頁面通過表單傳遞給處理頁面,在處理頁面引用java
29、bean(即附錄以及上文中涉及到的java類)得到結(jié)果。在收集頁面index.jsp中經(jīng)緯度在表單中直接輸入,至于日期的輸入,為了規(guī)范化輸入選擇使用js插件wdatepicker,可以在網(wǎng)頁上選擇所要輸入的日期,該插件置于目錄my97datepicker下。在處理頁面calcu.jsp中,引用編寫的java類輸出結(jié)果,日出日落時間可以直接作為字符串輸出,而月相的計算結(jié)果為對應(yīng)月相的編號,需要在calcu.jsp中打開相應(yīng)的月相圖片,其中月相圖片存放在目錄moon_img下。并且在處理頁面中使用了try-catch結(jié)構(gòu),保證了在輸入錯誤的情況下能夠?qū)﹀e誤進行處理。具體詳見附錄。第3章 模擬發(fā)布在
30、eclipse中建立web工程web_design,在目錄src下建立包com.des,所編寫的所有的需要用到的javabean(也就是java的類)都在該包下面。下載并安裝tomcat組件之后運行頁面index.jsp進行測試。經(jīng)過多測試以及修正之后,待網(wǎng)站設(shè)計完善之后,將工程web_design導(dǎo)出為war包。在官網(wǎng)上下載tomcat7.0的壓縮包,解壓之后運行bin目錄下的startup.bat即可模擬服務(wù)器的運行。在運行tomcat7.0之前需要在本機上安裝java并且配置好相關(guān)內(nèi)容。確定tomcat能夠正常運行之后,將其關(guān)閉,在目錄webapps下導(dǎo)入之前的war包,當(dāng)tomcat再
31、次運行的時候,會自動進行解包,生成網(wǎng)站目錄。下面配置tomcat服務(wù)器,以保證可以通過域名訪問到發(fā)布的網(wǎng)站。打開位于conf目錄下的server.xml文件將connector標(biāo)簽中port號改成80,即將端口號改成80端口。配置host標(biāo)簽下context標(biāo)簽為<context docbase="web_design" path="" debug="0" reloadable="true"/>,docbase為網(wǎng)站目錄名稱。之后運行tomcat,可以在瀏覽器的地址欄中通過輸入localhost訪問。若
32、要通過局域網(wǎng)訪問,則需要在路由器上建立ip地址與服務(wù)器映射。若要在本機上通過其他域名訪問,則需要修改hosts文件下的域名與ip地址的映射,并且將sever.xml中的localhost改成相對應(yīng)的域名。本文采用本機發(fā)布-本機訪問的方法模擬網(wǎng)站的發(fā)布。在配置好tomcat之后,在瀏覽器地址欄中輸入localhost,按回車后出現(xiàn)數(shù)據(jù)收集界面如下: 輸入過程如下:選擇日期之后(這里選擇5月30日),將連續(xù)輸出所選日期前后各15天,一共31天的結(jié)果,為避免占用太多空間,這里只展示首尾兩周的結(jié)果: 從該結(jié)果可以看出,2018年5月15日和6月14日月相為新月,并且在2018年的農(nóng)歷上,這兩天為初一,
33、由于制定農(nóng)歷時嚴格地以新月發(fā)生的時刻所在日為每月初一,因此可以證明月相的計算結(jié)果可信。第4章 改進措施及設(shè)想對于數(shù)據(jù)收集頁面,可以加入一些典型城市,通過選擇這些城市給出該城市對應(yīng)的結(jié)果。具體實現(xiàn)方法可以將城市及其對應(yīng)經(jīng)緯存入數(shù)據(jù)庫中,然后通過jsp訪問數(shù)據(jù)庫,獲得對應(yīng)的經(jīng)緯度,再通過計算得到相應(yīng)的結(jié)果。在此基礎(chǔ)上們可以對網(wǎng)站功能進行擴展,比如點擊城市名稱時,可以得到該城市下屬轄區(qū)的具體的日出日落時間,這需要經(jīng)緯度的精確表示。再者打開網(wǎng)頁時能夠定位到訪問地址所在地區(qū),并顯示當(dāng)?shù)靥鞖馇闆r等。甚至可以給網(wǎng)站加上根據(jù)經(jīng)緯度給出城市名稱以及顯示在地圖上的位置的功能。這些功能并不屬于日出日落時間以及月相查
34、詢系統(tǒng)的必要功能,因此在本文不予實現(xiàn)。第5章 總結(jié)本文所設(shè)計的日出日落時間以及月相查詢系統(tǒng)能夠查詢不同地理位置的不同日期的日出日落時間以及當(dāng)天月相。該系統(tǒng)可以作為其他系統(tǒng)的一個模塊應(yīng)用于不同的情況下,例如,如果要設(shè)計一個系統(tǒng)用來制作農(nóng)歷,就可以調(diào)用該系統(tǒng)的月相計算部分;此外,該系統(tǒng)還可以應(yīng)用于天氣預(yù)報系統(tǒng)中用來給出相關(guān)信息。在設(shè)計系統(tǒng)的過程中,對城市路燈監(jiān)控系統(tǒng)中日出日落時間算法的實現(xiàn)(即參考文獻2)一文中給出的計算日出日落時間的c+代碼進行了修正,改正了其中循環(huán)迭代的錯誤后應(yīng)用到系統(tǒng)的設(shè)計中。對astronomical algorithms一書第四十七章中計算月相的算法進行了擴展,與其相比,
35、本系統(tǒng)中計算月相的算法可以日期給出相應(yīng)的月相,而不僅僅只能夠計算特征月相的發(fā)生時刻。然而,本文在設(shè)計上也有些許不足,比如算法的原理是基于一些半解析理論,相當(dāng)于使用了數(shù)值逼近的方法得出結(jié)果,在結(jié)果上存在著微小誤差,不適用于精度要求很高的天文方面的運算,若要求更加精確的結(jié)果可以通過日月地三者位置關(guān)系以及開普勒行星定律得到。主要參考文獻1meeus,jean.astronomical algorithmsm.richmond:willmann-bell,inc,1991:59-67,319-3242 景春國 舒冬梅 顧德英. 城市路燈監(jiān)控系統(tǒng)中日出日落時間算法的實現(xiàn)d. 現(xiàn)代計算機(專業(yè)版), 20
36、03. 3 陳素君.計算月出和日出日落的幾種數(shù)學(xué)模型j.現(xiàn)代職業(yè)教育,2016(34):38-394 趙海蘭 徐繼明 徐建華. 經(jīng)緯度路燈控制器的設(shè)計與研究d. 照明工程學(xué)報, 2011.致謝從2017年末選題到2018年五月初,經(jīng)歷了緊張又短暫的五個月。這五個月來,我查閱了很多資料,了解了相關(guān)的天文知識,也粗略的學(xué)習(xí)了如何利用jsp技術(shù)開發(fā)網(wǎng)頁,以及如何搭建服務(wù)器。我最感激的就是我的導(dǎo)師劉楓老師,選題結(jié)束后,他指導(dǎo)了設(shè)計的方向,以及最終成果的模板并且不厭其煩的修改論文。在這里我要向劉楓老師表示衷心的感謝。其次我還要感謝這大學(xué)四年每一個教過我的老師,他們?yōu)槲艺故玖藘?yōu)秀的思維能力以及良好的編程基
37、礎(chǔ)。最后,我要向每一個幫助過我的同學(xué)表示感謝,感謝他們的鼓勵和幫助。附錄該附錄收錄了系統(tǒng)設(shè)計過程中使用的javabean以及網(wǎng)頁主體部分的代碼。一、 網(wǎng)頁主體代碼(1) 數(shù)據(jù)收集頁面主體部分代碼<body><center><form action="calcu.jsp" method="get"><span>經(jīng)緯:</span><input type="text" name="lng_lat" value="示例:40n116e"
38、 onclick="if(value=defaultvalue)value=''this.style.color='#000'" onblur="if(!value)value=defaultvalue;this.style.color='#999'" style="color:#999"/><script type="text/javascript" src="my97datepicker/wdatepicker.js"><
39、;/script><br><br><br><span>日期:</span><input type="text" name="date" value="格式:xxxx-xx-xx" onclick="if(value=defaultvalue)value=''this.style.color='#000'" onblur="if(!value)value=defaultvalue;this.style.c
40、olor='#999'" style="color:#999" class="wdate" onfocus="wdatepicker(lang:'zh-cn')"/><br><br><br><input type="submit" value="確定"/></form></center></body>(2) 處理頁面主體部分代碼<jsp:usebean id=
41、"geopoint" class="com.des.geopoint" scope="page"/><jsp:usebean id="time" class="com.des.time" scope="page"/><jsp:usebean id="get_suntime" class="com.des.sunriseset" scope="page"/><jsp:usebean
42、id="get_moonphrase" class="com.des.moonphrase" scope="page"/><% trygeopoint.initialize(request.getparameter("lng_lat");time.getdate(request.getparameter("date");int img_num;string path;%><table border=1 align="center" ><tr
43、><td>日期</td><td>日出時間</td><td>日落時間</td><td>月相</td></tr> <% time.mindays(15); for(int i=0;i<31;i+) img_num=get_moonphrase.get_moonphrase(geopoint,time); path="moon_imgm"+img_num+".jpg" %> <tr> <td><%ou
44、t.println(time.year+"-"+time.month+"-"+time.monthday); %></td> <td><%out.println(get_suntime.getsunrise(geopoint, time); %></td> <td><%out.println(get_suntime.getsunset(geopoint, time); %></td> <td><img id="moon_img"
45、 src=<%=path %> align="middle"></td> </tr> <% time.adddays(1); %> </table> <%catch(exception e)%><center><%out.println("exception occurs!n"); %></center><br><center><%out.println("error input"); /pr
46、int the root cause %> </center> <br> <% e.printstacktrace(); /print the info of function stuck. %><center><input type="button" value="返回" onclick="window.location.href('index.jsp')" /></center></body>二、 使用的javabean代碼1
47、. 數(shù)據(jù)類代碼1.1 經(jīng)緯度類geopointpublic class geopoint double glong=0,glat=0;public void initialize(string sourcestr)char temp=new char10;int temp_i=0;char arr=sourcestr.tochararray();for(int i=0;i<arr.length;i+)if(arri>='0'&&arri<='9'|arri='.')temptemp_i+=arri;continu
48、e;elseif(arri='n')glat=double.parsedouble(string.copyvalueof(temp);temp=null;temp=new char10;temp_i=0;continue;if(arri='s')glat=-double.parsedouble(string.copyvalueof(temp);temp=null;temp=new char10;temp_i=0;continue;if(arri='e')glong=double.parsedouble(string.copyvalueof(tem
49、p);temp=null;temp_i=0;temp=new char10;continue;else if(arri='w')glong=-double.parsedouble(string.copyvalueof(temp);temp=null;temp=new char10;temp_i=0;public double getlongitude() return glong;public double getglatitude() return glat;1.2 時間類timepublic class time private static int days_of_mon
50、th_1=31,28,31,30,31,30,31,31,30,31,30,31;private static int days_of_month_2=31,29,31,30,31,30,31,31,30,31,30,31;public int year,month,monthday;public int hour=0,minute=0,second=0;public void getdate(string str)string sourcestr = str.split("-");year=integer.valueof(sourcestr0);month=integer
51、.valueof(sourcestr1);monthday=integer.valueof(sourcestr2);/普通日期轉(zhuǎn)化為儒略日public double datetojde()double d=monthday+(double)hour+(double)minute/60+(double)second/3600)/24;double y=year,m=month;if(month=1|month=2) m=m+12;y=y-1;double a=math.floor(y/100);double b=2-a+math.floor(a/4);return math.floor(365.
52、25*(y+4716)+math.floor(30.6001*(m+1)+d+b-1524.5;/以天為單位進行日期計算public void adddays(int day)monthday=monthday+day;if(year%400=0) | (year%100!=0) && (year%4=0)if(monthday>days_of_month_2month-1) monthday=monthday%days_of_month_2month-1;month=month+1;if(month>12) month=month%12;year=year+1;
53、elseif(monthday>days_of_month_1month-1) monthday=monthday%days_of_month_1month-1;month=month+1;if(month>12) month=month%12;year=year+1;public void mindays(int day)monthday=monthday-day;if(year%400=0) | (year%100!=0) && (year%4=0)if(monthday<=0) month=month-1;if(month<=0) month=mo
54、nth+12;year=year-1;monthday=monthday+days_of_month_2month-1; elseif(monthday<=0) month=month-1;if(month<=0) month=month+12;year=year-1;monthday=monthday+days_of_month_1month-1;2. 日出日落時間計算sunriseset類該部分代碼參考自csdn博客(public class sunriseset private final static double h=-0.833;/計算從2000年1月1日開始的天數(shù)pu
55、blic static double daysfrom2000(time date) time date_2000=new time();date_2000.getdate("2000-1-1");return date.datetojde()-date_2000.datetojde();/角度規(guī)范化public static double mod360degree(double degree)double degree;while(degree<0)degree=degree+360;int part_int=(int) math.floor(degree);deg
56、ree=degree-part_int;degree=math.floormod(part_int, 360);return degree+degree-part_int;/根據(jù)uto計算utpublic static double utotout(double uto,geopoint geo,time date,boolean riseset)double gha,lambda,delta,t,c,utold=uto,utnew;double l,g,e,obl,signt,act;if(riseset) signt=1;else signt=-1;/到2000年的世紀數(shù)t=(daysfrom2000(date)+utold/360)/36525;/太陽平黃經(jīng)l=280.460+36000.770*t;/太陽的平近點角g=mod360degree(357.528+35999.050*t);/太陽的黃道經(jīng)度lambda=mod360degree(l+1.915*math.sin(g*math.pi/180)+0.02*math.sin(2*g*math.pi/180);/地球傾角obl=23.4393-0.0130*t;/太陽時間角ghae=-1.915*math.sin(g*math.pi/180)-0.020
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度醫(yī)療健康股權(quán)分配與產(chǎn)業(yè)布局協(xié)議
- 二零二五年度酒店員工勞動合同與員工培訓(xùn)及職業(yè)素養(yǎng)提升合同
- 2025年度金融控股集團間戰(zhàn)略資金借款合同
- 二零二五年度高空作業(yè)安全協(xié)議責(zé)任書(高空設(shè)備檢修安全協(xié)議)
- 二零二五年度鮮魚養(yǎng)殖與品牌營銷合作合同
- 二零二五年度電子商務(wù)平臺技術(shù)支持合同范本
- 二零二五年度汽車租賃代駕保險保障合同
- 2025年度餐廳門面租賃與地方旅游發(fā)展合作合同
- 安徽省2025年度非全日制用工勞動合同書解除與終止協(xié)議
- 數(shù)據(jù)安全保障與服務(wù)合作合同
- 拗九節(jié)班會方案
- 2022年八大員的勞務(wù)員考試題及答案
- DLT5210.4-2018熱工施工質(zhì)量驗收表格
- 醫(yī)院實習(xí)護士轉(zhuǎn)科表
- 2023年最新的郭氏宗祠的對聯(lián)大全
- 《中國古代文學(xué)史》宋代文學(xué)完整教學(xué)課件
- 新部編人教版四年級下冊道德與法治全冊教案(教學(xué)設(shè)計)
- 物業(yè)服務(wù)企業(yè)市場拓展戰(zhàn)略規(guī)劃課件
- 2018年青海大學(xué)碩士論文格式模板
- 四年級道德與法治從中國制造到中國創(chuàng)造
- 兒童跌倒評估量表(Humpty-Dumpty)
評論
0/150
提交評論