Created
August 6, 2021 00:03
-
-
Save suchowan/a696cdf3bfa81f0f058cbaea1aac29a7 to your computer and use it in GitHub Desktop.
寛政暦時代二十四節気日時の確認
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
=begin | |
寛政暦時代の二十四節気日時の確認 | |
参考 https://eco.mtk.nao.ac.jp/koyomi/wiki/BEC3C4B9CBA1.html | |
寛政暦では暦定数を10年ごとに更新するので、まず10年目ごとの | |
天正冬至の日時を正確に計算し、すべての二十四節気は、その間 | |
を時間で240等分して求める。 | |
=end | |
module SolarTerms寛政暦 | |
C十二支 = %(子丑寅卯辰巳午未申酉戌亥子) | |
C十干 = %(甲乙丙丁戊己庚辛壬癸) | |
C紀元 = 1797 # 寛政九年 | |
C暦元 = 2377391.107112 # ユリウス通日に時差補正 | |
C歳周 = 365.242347071 # 365.241622615342+0.00000043537×(C紀元 -133) | |
C消長 = 0.43537E-6 / 2 # 平均年長に用いるので 2 で割る | |
C単位 = 10 # 十年ごとに更新 | |
module_function | |
C確認角度 = (0...24).to_a.map {|d| 15 * d} | |
def 確認 | |
(1797...1844).each do |年次| | |
C確認角度.each do |角度| | |
消長あり = 表記(通日(年次, 角度, true)) | |
消長なし = 表記(通日(年次, 角度, false)) | |
unless 消長あり[/-.*\d /] == 消長なし[/-.*\d /] | |
puts "%d %3d : 消長あり %s : 消長なし %s" % | |
[年次, 角度, 消長あり, 消長なし] | |
end | |
end | |
end | |
end | |
# 寛政暦表記体系での日時 | |
def 表記(通日) | |
周期, 周期内通日 = (通日 - 11).divmod(60) | |
大余, 小余 = 周期内通日.divmod(1) | |
辰刻, 刻分 = (小余 * 12 + 0.5).divmod(1) | |
刻, 分 = (刻分 * 100 / 12 + 0.5).divmod(1) | |
return "%s%s - %s %d (%4.2f)" % | |
[C十干[大余 % 10], C十二支[大余 % 12], C十二支[辰刻], 刻, 分*10] | |
end | |
# 指定の太陽位置になる通日 | |
def 通日(西暦年, 冬至からの角度, 消長=true) | |
単位年紀, 単位年紀内の年次 = (西暦年 - C紀元).divmod(C単位) | |
直前 = 単位年紀天正冬至(単位年紀 , 消長) | |
直後 = 単位年紀天正冬至(単位年紀+1, 消長) | |
return 直前 + (直後 - 直前) * | |
(単位年紀内の年次* 360 + 冬至からの角度) / (360 * C単位) | |
end | |
# 単位年目ごとの天正冬至の通日 | |
def 単位年紀天正冬至(単位年紀, 消長) | |
平均年長 = C歳周 | |
平均年長 += (単位年紀 - 1) * C単位 * C消長 if 消長 | |
return C暦元 + C単位 * 単位年紀 * 平均年長 | |
end | |
end | |
SolarTerms寛政暦.確認 #=> | |
# 1827 120 : 消長あり 癸卯 - 寅 0 (5.11) : 消長なし 癸卯 - 丑 8 (8.31) | |
# 1829 150 : 消長あり 甲申 - 丑 1 (0.03) : 消長なし 甲申 - 丑 0 (9.86) | |
# 1830 300 : 消長あり 辛酉 - 午 2 (0.04) : 消長なし 辛酉 - 午 1 (9.85) | |
# 1832 90 : 消長あり 戊戌 - 亥 3 (0.05) : 消長なし 戊戌 - 亥 2 (9.85) | |
# 1833 240 : 消長あり 丙子 - 辰 4 (0.06) : 消長なし 丙子 - 辰 3 (9.84) | |
# 1835 30 : 消長あり 癸丑 - 酉 5 (0.07) : 消長なし 癸丑 - 酉 4 (9.83) | |
# 1836 180 : 消長あり 辛卯 - 寅 6 (0.08) : 消長なし 辛卯 - 寅 5 (9.82) | |
# 1837 330 : 消長あり 戊辰 - 未 7 (0.09) : 消長なし 戊辰 - 未 6 (9.81) | |
# 1839 120 : 消長あり 丙午 - 子 8 (0.11) : 消長なし 丙午 - 子 7 (9.80) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment