在做noteicon的萬年曆和月相顯示(在萬年曆和時鐘裡顯示)的時候,我查閱了一些開源**和資料,發現在一些開源專案中把這三者混淆了,有必要重新捋一下。
一、月相(moon phases)
在《大學天文學》第56頁是這樣說的:
雖然任何時刻月亮總是被太陽照亮半個球面,但我們能夠見到的月球明亮部分的大小和形狀是不同的,有圓缺「盈虧」的變化,此現象叫「月相」。月相變化是週期性的(圖5-3)。月相形成的原因,一是月球自己不發光也不透光,而只能反射太陽光;二是日、月、地三者的相對位置在不斷變化,且有週期性。這月相變化的週期叫「朔望月」,一朔望月平均為29.5306平太陽日,最長為29.82917d,最短為29.2944d。「朔」或「新月」日月相合,發生在農曆初一,不見月;「望」或「滿月」日月相沖,發生在農曆十
五、十六,月圓。當月球在太陽西邊90°時為「下弦」,月球在太陽東邊90°時為「上弦」,分別發生在農曆廿二或廿三和初
七、八,此時只能看到月球被照亮半球的一半。隨著日月黃經差的遞變,月相圓缺的程度也在遞變。
沒看懂?簡單粗暴的說法:由於日、月、地三者的相對位置在不斷變化,造成我們看到「月不常圓」,月亮的圓缺變化就是月相。
在天文計算時,由於月相是由地、月、日三者的夾角形成的,同時還要考慮各種軌道影響因素,因此很麻煩,具體計算方法可以參見《演算法的樂趣》第11.3.1節的說明和該書提供的源**。補充說明:
1、該書給出的日月合朔源**有一點小bug,特殊情況下會出現死迴圈,不過很容易修正,我就給點面子不詳細說了。
2、該書給出的計算日月合朔的源**是計算地、月、日三者的夾角為零時的源**,但看懂以後很容易改成能夠計算滿月(夾角180度)、上弦月(90度)、下弦月(270度)等。noteicon就用它計算滿月(望月)時刻。
3、該書的日月合朔演算法出自英文版《天文演算法》,在網上能下到原書掃瞄版和勘誤表。另外「壽星天文歷」軟體的作者許劍偉先生翻譯了該書的中文版,雖然未正式出版,但在網上也能下到電子版。不過中文版沒有全部翻譯,所以要看的話建議還是與英文版對照著看。另外「壽星天文歷」也是開源的,只不過是用js寫的,我看得頭暈,沒有的c++**來得熟悉。
二、月齡(moon age)
如果把月亮從新月、滿月再到新月的過程看作月亮的「一生」,即出生(新月)、青年(上弦月)、中年(滿月)、老年(下弦月)、死亡(新月),那麼從上乙個新月到下乙個新月之間的時間,即上面中說的「朔望月」之間的時間就是月亮的年齡,即「月齡」。
沒看懂?簡單粗暴的解釋:農曆的初
一、初二等日期數字就相當於月亮的「年齡」,即月亮在初一出生,逐漸成長到十五滿月,然後逐漸衰老,直到月底二十九(小月)或三十(大月)就拜拜了您吶。
在能夠準確計算日月合朔時間點的情況下,計算月齡即陰曆的日期不會有任何問題,從初一往下排就行了。但不能反過來計算,即從月齡計算月相。以滿月為例,按月齡計算應該在十五,但實際也可能在十六甚至十七。但在像中用迭代法求月相的準確時刻時,月齡可以作為迭代初始值,noteicon中就用月長的1/2時刻作為求望月時的迭代初始值,然後迭代逼近。
三、月面照亮比例(illuminated fraction of the moon's disk)
很多鐘錶號稱具有「月相」顯示功能,其實我覺得應該說顯示的是「月面照亮比例」,即整個月面有多少部分被照亮,從而能被我們所看見。
這部分確實容易與「月相」相混淆,但計算月相的視角和計算月面照亮比例的視角是不一樣的,所以在中,「月相(phases of the moon)」與「月面照亮比例(illuminated fraction of the moon's disk)」是在獨立的兩章裡講的,計算公式也不一樣。書中的簡化計算公式很容易翻譯成**,給出力學時即可計算出該力學時刻的月面照亮比例,用此數值畫出來的月亮,才是肉眼在地面上看到的月亮的準確反映。noteicon的時鐘**和萬年曆右下角的月亮就是這麼畫的。
如果像上面我給出的鏈結中的**一樣用月齡畫月亮,碰到「十五的月亮十六圓」的時候就傻眼了。
參考資料
.孫錦龍,李德範編著. 大學天文學[m]. 開封:河南大學出版社, 2005.03.
.王曉華著. 演算法的樂趣[m]. 北京:人民郵電出版社, 2015.04.
.jean meeus. astronomical algorithms -- 2nd ed. willmann-bell, inc. 1998
無關技術 朋友圈朝花朝拾 月相
月相是以日月黃經差度數 以下的度數就是日月黃經差值 來算的。農曆每一天的月相都有自己的專門名字,詳情請看 月相是日月黃經差度數 以下的度數就是日月黃經差值 來算的,共劃分八種 新月 農曆初一日,即朔日 0度 上娥眉月 一般為農曆的初二夜左右 初七日左右 0度 90度 上弦月 農曆初八左右 90度 凸...
月之暗面 動機不純
反正沒人看我的部落格,我想乙個人真正的讀研的目的應該是這樣的 1.在學完本科知識之後,對某個領域有了想法,然後決定繼續深造.2.本科的知識學完之後,希望可以繼續學習更加深刻的知識,然後決定讀研.我應該二者都不屬於,我是那種,本科知識都沒有學會的,就想要讀研的人.我記得大一伊始我有讀研的想法完全是將考...
7月3日滴滴面經
其實吧,面經算不上,因為自己總結的可能不夠到位,我就盤點一下今天面試官問我的幾個問題 1.python中list與tuple的區別 2.說幾個linux的常用命令 3.檢視記憶體使用情況的命令是 4.你對磁碟陣列了解多少,引入raid有什麼好處,為了解決什麼問題,raid0和raid1的區別,哪乙個...