Twitter の Bot 「節気さんシリーズ」で月の名前を求めるという計算をしています。
※月と言っても、天体の月です。「三日月」とか、「十五夜」とかそっちの名前。
これ、実はまじめに計算すると結構大変でして、節気さんシリーズの中でも、一番面倒な計算です。
※ただし、太陽と月の位置を決定するという基礎的な計算の方がはるかに面倒であるのはもちろんです。
※ただ、こちらのほうは、『日の出・日の入りの計算』(長沢工著,地人書館)に収録されているアルゴリズムを元にしたものなので、自分では計算していないという。
そういうわけで、宣伝の意味も込めて(ほとんどそれだけ)紹介してみることにしました。
実際の計算結果(イメージ)も最後につけました。
【ある時刻における「月の名前」を求める】
1.定義
「月の名前」は、「ある時刻」を含む旧暦の(カレンダーの)月における月の出現回数で決定される。
※具体的に採用している名前は後述
この定義では、実は、「月が出ていない」時の名前が決定されないので、「節気さんシリーズ」では、
・旧暦の1日はその日を通して、「朔月」
・旧暦の晦日はその日を通して、「晦日月」
・その他の日は、「日本における月の入り(実際には、登録している50地域)」が完了して、10分経過後に次の名前に変更する
というロジックを採用しています。
2.求め方
1)「ある時刻」における「直前の朔の時刻(「ある時刻」以下)」と「直後の朔の時刻(「ある時刻」超過)」を求める
2) 「ある時刻」が、旧暦1に含まれる場合は、「朔月」とする
3)「ある時刻」が、旧暦の朔月(直後の朔の時刻を含む日の前日)なら、「晦日月」とする。
4)それ以外の場合は、計算が必要。
5)旧暦日付が基準になるので、
「調査開始時刻」=「直前の朔の時刻を含む日の 00:00」
「調査終了時刻」=「直後の朔の時刻を含む日(は、来月の1日)の前日の 23:59」とする
6)「調査開始時刻」以降の最初の「月の入り」を、50の地域について求める。
50の地域を比較して、最も遅いものを、「1回目の月の入り」とする。
7) 「1回目の月の入り」以降の最初の「月の入り」を、50の地域について求める。
これが、「2回目の月の入り」となる。
8) 以降同様にして、「月の入り時刻」が、「調査終了時刻」以降になるまで月の入り時刻を求める。
9) 以上で求めた、「n回目の月の入り時刻」に10分を加算する。これが、「n + 1回目の月の名前の開始」となる。
10) 「n回目の月の名前の開始」が、旧暦 n - 1 日であれば、その時刻を、旧暦 n - 1日の 23:59 にする。
11) 「n回目の月の名前の開始」時刻が、「ある時刻」以上となるような最初の n を求める。
12) n 番目の月の名前を、「月の名前」とする。
3.具体的な月の名前
(括弧内は、出現回数です・8, 12, 22 は名前をつけていません)
朔月(1), 既朔(2), 三日月(3), 夕月(4), 夕月(5), 宵月(6),
弓張月(7), 九夜月(9), 十日夜(10), 十日余の月(11),
十三夜(13), 小望月(14), 十五夜(15), 十六夜(16), 立待月(17),
居待月(18), 臥待月(19), 更待月(20), 二十日余の月(21),
弓張月(23), 有明月(24), 有明月(25), 二十六夜(26), 暁月(27),
暁月(28), 暁月(29), 暁月(30),
計算結果は、こんな感じになります。
月の出が少しずつ遅くなっているので、それにつれて、「月の名前」の変化点も後ろにずれています。
2010年12月09日
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/42030956
この記事へのトラックバック
http://blog.sakura.ne.jp/tb/42030956
この記事へのトラックバック