資源描述:
《是程序更是文化》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在應用文檔-天天文庫。
1、是程序,更是文化呀所謂的“天文算法”,就是利用經(jīng)典力學定律推導行星運轉(zhuǎn)軌道,對任意時刻的行星位置進行精確計算,從而獲得某種天文現(xiàn)象發(fā)生時的時間,比如日月合朔這一天文現(xiàn)象就是太陽和月亮的地心黃經(jīng)(視黃經(jīng))差為0的那一瞬間。能夠計算任意時刻行星位置的一套理論就被稱為星歷表,比較著名的星歷表有美國國家航空航天局下屬的噴氣推進實驗室發(fā)布的DE系列星歷表,還有瑞士天文臺在DE406基礎上拓展的瑞士星歷表等等。根據(jù)行星運行軌道直接計算行星位置通常不是很方便,更何況大多數(shù)民用天文計算用不上那么多精確的軌道參數(shù),于是天文學家在這些星歷表的基礎上推導出了很多可
2、以做簡便計算,但是又能保證一定精度的行星運行理論,比較著名的有VSOP82/87太陽系行星運行理論和ELP-2000/82月球運行理論,這兩套理論在精度上已經(jīng)很接近DE系列星歷表了。關于如何應用這兩套倫理進行天文歷法計算,請參考“日歷生成算法”系列文章的第三篇《用天文方法計算二十四節(jié)氣》和第四篇《用天文方法計算日月合朔》,本文介紹的農(nóng)歷年歷推算是在已經(jīng)通過天文算法獲得了精確的節(jié)氣時間和日月合朔時間的基礎上進行的。中國的官方紀時采用的是中國公歷(格里歷),因此農(nóng)歷年歷的推導應以公歷年的周期為主導,附上農(nóng)歷年的信息,也就是說,年歷以公歷的1月1日
3、為起始,至12月31日結(jié)束,根據(jù)農(nóng)歷歷法推導出的農(nóng)歷日期信息,附加在公歷日期信息上形成雙歷。通常情況下,一個公歷年周期都不能完整地對應到一個農(nóng)歷年周期上,二者的偏差也不固定,因此不存在穩(wěn)定的對應關系,也就是說,不存在從公歷的日期到農(nóng)歷日期的轉(zhuǎn)換公式,只能根據(jù)農(nóng)歷的歷法規(guī)則推導出農(nóng)歷日期與公歷日期的對應關系。由農(nóng)歷歷法規(guī)則可知,上一個公歷年的冬至()所在的朔望月是上一個農(nóng)歷年的十一月(冬月),所以在進行節(jié)氣計算時,需要計算包括上一年冬至節(jié)氣在內(nèi)的二十五個節(jié)氣,才能對應上上一個農(nóng)歷年的十一月和當前農(nóng)歷年的十一月。在計算與之對應的朔日時,考慮到有閏
4、月的情況,需要從上一年冬至節(jié)氣前的第一個朔日,連續(xù)計算15個朔日才能保證覆蓋兩個冬至之間的一整年時間,圖(1)顯示了2011年沒有閏月的情況下朔日和冬至的關系:9/9圖(1)沒有閏月情況下朔日與冬至節(jié)氣關系圖圖中上排數(shù)字是公歷月的編號,黑色圓點代表朔日,黑色三角形代表冬至節(jié)氣。圖(2)顯示了2012年有閏月的情況下朔日和冬至的關系:圖(2)有閏月情況下朔日與冬至節(jié)氣關系圖通過計算得到能夠覆蓋兩個冬至節(jié)氣的所有朔日時間后,就可以著手建立公歷日期與農(nóng)歷日期的對應關系。以圖(1)所示的2011年為例,首先根據(jù)計算得到的15個朔日(2011年只會用到
5、其中的前14個時間)時間,建立與2011年(公歷年)有關的朔望月關系表:朔日編號合朔時間對應公歷日期月長月名101:35:39.902010-12-0629冬月217:02:34.262011-01-0430臘月310:30:42.672011-02-0330正月404:45:59.442011-03-0529二月522:32:15.132011-04-0330三月614:50:31.792011-05-0330四月705:02:32.512011-06-0229五月9/9816:53:54.102011-07-0130六月902:39:45
6、.062011-07-3129七月1011:04:06.432011-08-2929八月1119:08:50.092011-09-2730九月1203:55:54.642011-10-2729十月1314:09:40.972011-11-2530冬月1402:06:27.052011-12-2529臘月1515:39:23.992012-01-2330正月表(2)2011年朔望月與公歷日期關系表編號為1和2的兩個朔日之間的朔望月是十一月,因為冬至節(jié)氣落在這個朔望月,其它月的月名依次類推,正月的朔日就是春節(jié)。輸出公歷和農(nóng)歷雙歷時,以月(公歷)為
7、單位,從每月第一天開始,依次判斷每一天屬于哪個朔望月,確定這一天的農(nóng)歷月名,然后比較這一天和這個朔望月的朔日之間相差幾天,記為農(nóng)歷日期。以2011年1月1日為例,這一天在2010年12月6日(2010年農(nóng)歷十一月的朔日)和2011年1月4日之間(2010年農(nóng)歷十二月的朔日),查表(1)可知對應的農(nóng)歷月是十一月,這一天和2010年12月6日相差26天,因此這一天的農(nóng)歷日期就是“廿七”。再以2011年2月3日(春節(jié))這一天為例,查朔望月表得知2月3日屬于從2月3日開始的朔望月,這個朔望月的月名是正月,而2月3日就是月首,農(nóng)歷日期是初一,正月初一就
8、是春節(jié)。先來介紹兩個函數(shù),這兩個函數(shù)分別用于計算節(jié)氣和日月合朔發(fā)生的時間,函數(shù)算法的具體描述將在“日歷生成算法”系列文章的第三篇《用天文方法計算二十四節(jié)氣》和第四篇