mk-mode BLOG

このブログは自作の自宅サーバに構築した Debian GNU/Linux で運用しています。
PC・サーバ構築等の話題を中心に公開しております。(クローンサイト: GitHub Pages

ブログ開設日2009-01-05
サーバ連続稼働時間
Reading...
Page View 合計
Reading...
今日
Reading...
昨日
Reading...

Ruby - 月相計算!

[ プログラミング ] [ Ruby, カレンダー ]

こんばんは。

少し前に、グレゴリオ暦(Y年m月d日 H時M分S秒)から太陽・月の黄経、月齢を計算する Ruby スクリプトの紹介しました。

今回は、グレゴリオ暦(Y年m月d日 H時M分S秒)から月相(月の満ち欠け)を計算する Ruby スクリプトの紹介です。

月相は月齢と連動はしますが、正確には一致しません。
月の公転軌道が真円でないからです。

より正確に月相を計算するには太陽と月の黄経の差から計算します。

今回紹介するのは、当方サイトの旧暦計算等で使用しているスクリプトから月相計算部分のみ抜粋した形となっています。
ですが、実際には太陽黄経と月黄経が求まれば簡単に計算できるものであります。

0. 前提条件

  • Linux Mint 14 Nadia (64bit), Ruby 2.0.0-p0 で作成・動作確認。

1. 概要

まず月相は、月の黄経から太陽の黄経を引いた値(0 以上 360 未満の値)を 0 から 27 の整数値に換算したものである。

MOONPHASE

黄経差月相呼び名
0 °0新月(朔)
90 °7上弦
180 °14満月(望)
270 °21下弦

そして、月相を計算する大まかな流れは以下のとおり。

  1. グレゴリオ暦からユリウス通日を計算。
    ユリウス通日については、過去記事もご参考に。-> * 日数計算の方法! - mk-mode BLOG
  2. ユリウス通日から太陽の黄経を計算。
  3. ユリウス通日から月の黄経を計算。
  4. 太陽の黄経と月の黄経から月相を計算。

今回は Ruby スクリプトの紹介なので、ここでは摂動等の詳細は説明しません。
「摂動」とは互いの惑星の重力により軌道が乱れるということ、という事だけに留めておく。

2. Ruby スクリプト作成

作成した Ruby スクリプトは、長くなったので、ここには掲載しない。
GitHub リポジトリに登録してああるので、そちらを参照。
重要なのは、太陽と月の黄経の計算することと、月の黄経から太陽の黄経を引いた値を 0 から 27 の値に換算すること。
月の黄経から太陽の黄経を引いた値がマイナスになる場合は、角度の正規化を行う(360 を加算する)。

3. Ruby スクリプト実行

引数に8桁数字(YYYYMMDD 形式)か14桁数字(YYYYMMDDHHMMSS)を指定して、実行する。
(引数を指定しなければ、現在日時(システム日時)を判断する)

1
2
3
4
$ ruby calc_moonphase.rb 20130316
黄経・太陽 = 355.19062960962077°
黄経・月   = 40.25276171663072°
2013-03-16 00:00:00 の月相 = 4

4. 参考文献

黄経計算に必要な摂動項・比例項の計算に使用する定数等、大変参考になる書籍です。


当方、カレンダー作成や旧暦計算の Ruby スクリプトを作成してい使用していましたが、任意の日時の月相を計算するだけのスクリプトを作成していなかったので、今回作成した次第です。

ちなみに、当方サイトのカレンダーはこちら。

以上。

Comments