zakuro 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/zakuro/calculation/cycle/abstract_remainder.rb +33 -20
- data/lib/zakuro/calculation/stella/lunar/abstract_location.rb +9 -7
- data/lib/zakuro/calculation/stella/lunar/choukei_value.rb +19 -0
- data/lib/zakuro/era/japan/reki.rb +1 -1
- data/lib/zakuro/version.rb +1 -1
- data/lib/zakuro/version/context.rb +1 -1
- data/lib/zakuro/version/daien/const/number.rb +55 -0
- data/lib/zakuro/version/daien/const/remainder.rb +53 -0
- data/lib/zakuro/version/daien/cycle/remainder.rb +59 -0
- data/lib/zakuro/version/daien/cycle/solar_term.rb +34 -0
- data/lib/zakuro/version/daien/daien.rb +36 -0
- data/lib/zakuro/version/daien/monthly/lunar_phase.rb +106 -0
- data/lib/zakuro/version/daien/range/annual_range.rb +39 -0
- data/lib/zakuro/version/daien/stella/lunar/adjustment.rb +240 -0
- data/lib/zakuro/version/daien/stella/lunar/localization.rb +44 -0
- data/lib/zakuro/version/daien/stella/lunar/location.rb +80 -0
- data/lib/zakuro/version/daien/stella/lunar/value.rb +75 -0
- data/lib/zakuro/version/daien/stella/origin/average_november.rb +34 -0
- data/lib/zakuro/version/daien/stella/origin/lunar_age.rb +62 -0
- data/lib/zakuro/version/daien/stella/origin/winter_solstice.rb +55 -0
- data/lib/zakuro/version/daien/stella/solar/adjustment.rb +93 -0
- data/lib/zakuro/version/daien/stella/solar/average.rb +98 -0
- data/lib/zakuro/version/daien/stella/solar/interval.rb +108 -0
- data/lib/zakuro/version/daien/stella/solar/location.rb +61 -0
- data/lib/zakuro/version/daien/stella/solar/value.rb +36 -0
- data/lib/zakuro/version/gihou/const/remainder.rb +0 -2
- data/lib/zakuro/version/gihou/cycle/remainder.rb +1 -6
- data/lib/zakuro/version/gihou/monthly/lunar_phase.rb +1 -1
- data/lib/zakuro/version/gihou/stella/lunar/location.rb +2 -8
- data/lib/zakuro/version/gihou/stella/lunar/value.rb +3 -2
- data/lib/zakuro/version/gihou/stella/solar/average.rb +1 -1
- data/lib/zakuro/version/senmyou/const/remainder.rb +0 -2
- data/lib/zakuro/version/senmyou/cycle/remainder.rb +1 -6
- data/lib/zakuro/version/senmyou/monthly/lunar_phase.rb +1 -1
- data/lib/zakuro/version/senmyou/stella/lunar/location.rb +2 -8
- data/lib/zakuro/version/senmyou/stella/lunar/value.rb +3 -2
- data/lib/zakuro/version/senmyou/stella/solar/average.rb +1 -1
- data/lib/zakuro/version/version_class_resolver.rb +4 -0
- data/lib/zakuro/version_factory.rb +1 -1
- metadata +25 -7
- data/lib/zakuro/version/taien/taien.rb +0 -19
@@ -0,0 +1,75 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../../../calculation/stella/lunar/choukei_value'
|
4
|
+
|
5
|
+
require_relative '../../cycle/remainder'
|
6
|
+
|
7
|
+
require_relative './adjustment'
|
8
|
+
|
9
|
+
# :nodoc:
|
10
|
+
module Zakuro
|
11
|
+
# :nodoc:
|
12
|
+
module Daien
|
13
|
+
# :nodoc:
|
14
|
+
module Lunar
|
15
|
+
#
|
16
|
+
# Value 月補正値
|
17
|
+
#
|
18
|
+
module Value
|
19
|
+
# @return [Output::Logger] ロガー
|
20
|
+
LOGGER = Output::Logger.new(location: 'lunar_value')
|
21
|
+
|
22
|
+
# :reek:TooManyStatements { max_statements: 9 }
|
23
|
+
|
24
|
+
#
|
25
|
+
# 月の運行による補正値を算出する
|
26
|
+
#
|
27
|
+
# @param [Cycle::LunarRemainder] remainder 月の大余小余
|
28
|
+
#
|
29
|
+
# @return [Integer] 補正値
|
30
|
+
#
|
31
|
+
def self.get(remainder:)
|
32
|
+
valid?(remainder: remainder)
|
33
|
+
|
34
|
+
day, minute = Calculation::Lunar::ChoukeiValue.remainder_without_second(
|
35
|
+
remainder: remainder
|
36
|
+
)
|
37
|
+
|
38
|
+
# 引き当て
|
39
|
+
row = Adjustment.specify(day: day, minute: minute)
|
40
|
+
|
41
|
+
value = row.value
|
42
|
+
|
43
|
+
# LOGGER.debug("value.per: #{value.per}")
|
44
|
+
# LOGGER.debug("row.denominator: #{row.denominator}")
|
45
|
+
# LOGGER.debug("value.stack: #{value.stack}")
|
46
|
+
|
47
|
+
minus_minute = Adjustment.minus_minute(day: day, minute: minute)
|
48
|
+
|
49
|
+
day = Calculation::Lunar::ChoukeiValue.rounded_day(
|
50
|
+
per: value.per, denominator: row.denominator, minute: minus_minute
|
51
|
+
)
|
52
|
+
|
53
|
+
# LOGGER.debug("day: #{day}")
|
54
|
+
|
55
|
+
value.stack + day
|
56
|
+
end
|
57
|
+
|
58
|
+
#
|
59
|
+
# 大余小余を検証する
|
60
|
+
#
|
61
|
+
# @param [Cycle::LunarRemainder] remainder 大余小余
|
62
|
+
#
|
63
|
+
# @return [True] 正しい(月の位相計算に使う大余小余)
|
64
|
+
# @return [True] 正しくない
|
65
|
+
#
|
66
|
+
def self.valid?(remainder:)
|
67
|
+
return if remainder.is_a?(Cycle::LunarRemainder)
|
68
|
+
|
69
|
+
raise ArgumentError, "unmatch parameter type: #{remainder.class}"
|
70
|
+
end
|
71
|
+
private_class_method :valid?
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative './lunar_age'
|
4
|
+
require_relative './winter_solstice'
|
5
|
+
|
6
|
+
# :nodoc:
|
7
|
+
module Zakuro
|
8
|
+
# :nodoc:
|
9
|
+
module Daien
|
10
|
+
# :nodoc:
|
11
|
+
module Origin
|
12
|
+
#
|
13
|
+
# AverageNovember 11月経
|
14
|
+
#
|
15
|
+
module AverageNovember
|
16
|
+
#
|
17
|
+
# 11月経朔(冬至が含まれる月の1日)を求める
|
18
|
+
#
|
19
|
+
# @param [Integer] western_year 西暦年
|
20
|
+
#
|
21
|
+
# @return [Remainder] 11月経朔
|
22
|
+
#
|
23
|
+
def self.get(western_year:)
|
24
|
+
# 冬至
|
25
|
+
winter_solstice = WinterSolstice.get(western_year: western_year)
|
26
|
+
# 天正閏余
|
27
|
+
lunar_age = LunarAge.get(western_year: western_year)
|
28
|
+
|
29
|
+
winter_solstice.sub(lunar_age)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../../../output/logger'
|
4
|
+
|
5
|
+
require_relative '../../const/number'
|
6
|
+
|
7
|
+
# :nodoc:
|
8
|
+
module Zakuro
|
9
|
+
# :nodoc:
|
10
|
+
module Daien
|
11
|
+
# :nodoc:
|
12
|
+
module Origin
|
13
|
+
#
|
14
|
+
# LunarAge 天正閏余
|
15
|
+
#
|
16
|
+
module LunarAge
|
17
|
+
# @return [Integer] 朔望月
|
18
|
+
SYNODIC_MONTH = Const::Number::Cycle::SYNODIC_MONTH
|
19
|
+
# @return [Integer] 一年
|
20
|
+
YEAR = Const::Number::Cycle::YEAR
|
21
|
+
# @return [Integer] 積年
|
22
|
+
TOTAL_YEAR = Const::Number::Stack::TOTAL_YEAR
|
23
|
+
# @return [Integer] 暦の開始年
|
24
|
+
BEGIN_YEAR = Const::Number::Stack::BEGIN_YEAR
|
25
|
+
|
26
|
+
# @return [Output::Logger] ロガー
|
27
|
+
LOGGER = Output::Logger.new(location: 'lunar_age')
|
28
|
+
|
29
|
+
# :reek:TooManyStatements { max_statements: 7 }
|
30
|
+
|
31
|
+
#
|
32
|
+
# 対象年の天正閏余(冬至より前にある11月経朔との差 = 月齢)を算出する
|
33
|
+
# 太陽と月の運動による補正値を算出し、その補正結果を返す
|
34
|
+
#
|
35
|
+
# @param [Integer] western_year 西暦年
|
36
|
+
#
|
37
|
+
# @return [Remainder] 天正閏余
|
38
|
+
#
|
39
|
+
def self.get(western_year:)
|
40
|
+
# 積年の開始から対象年までの年数
|
41
|
+
total = TOTAL_YEAR + western_year - BEGIN_YEAR
|
42
|
+
|
43
|
+
# 12朔望月に対する1年の余り(単位:分)
|
44
|
+
remainder_minute = YEAR - (SYNODIC_MONTH * 12)
|
45
|
+
|
46
|
+
# 朔望月に含まれなかった余り(単位:年)
|
47
|
+
remainder_year = total % SYNODIC_MONTH
|
48
|
+
|
49
|
+
LOGGER.debug("[01]: #{remainder_year}")
|
50
|
+
|
51
|
+
# 天正閏余
|
52
|
+
lunar_age = remainder_minute * remainder_year % SYNODIC_MONTH
|
53
|
+
|
54
|
+
LOGGER.debug("[02]: #{lunar_age}")
|
55
|
+
|
56
|
+
# 大余・小余に変換する
|
57
|
+
Cycle::Remainder.new(total: lunar_age)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../../../output/logger'
|
4
|
+
|
5
|
+
require_relative '../../const/number'
|
6
|
+
|
7
|
+
# :nodoc:
|
8
|
+
module Zakuro
|
9
|
+
# :nodoc:
|
10
|
+
module Daien
|
11
|
+
# :nodoc:
|
12
|
+
module Origin
|
13
|
+
#
|
14
|
+
# WinterSolstice 冬至
|
15
|
+
#
|
16
|
+
module WinterSolstice
|
17
|
+
# @return [Integer] 通余
|
18
|
+
REMAINDER_ALL_YEAR = Const::Number::Derivation::REMAINDER_ALL_YEAR
|
19
|
+
# @return [Integer] 60日
|
20
|
+
SIXTY_DAYS = Const::Number::Derivation::SIXTY_DAYS
|
21
|
+
# @return [Integer] 積年
|
22
|
+
TOTAL_YEAR = Const::Number::Stack::TOTAL_YEAR
|
23
|
+
# @return [Integer] 暦の開始年
|
24
|
+
BEGIN_YEAR = Const::Number::Stack::BEGIN_YEAR
|
25
|
+
|
26
|
+
# @return [Output::Logger] ロガー
|
27
|
+
LOGGER = Output::Logger.new(location: 'winter_solstice')
|
28
|
+
|
29
|
+
# :reek:TooManyStatements { max_statements: 6 }
|
30
|
+
|
31
|
+
#
|
32
|
+
# 対象年の前年の冬至を求める
|
33
|
+
#
|
34
|
+
# @param [Integer] western_year 西暦年
|
35
|
+
#
|
36
|
+
# @return [Remainder] 前年の冬至
|
37
|
+
#
|
38
|
+
def self.get(western_year:)
|
39
|
+
# 積年の開始から対象年までの年数
|
40
|
+
total = TOTAL_YEAR + western_year - BEGIN_YEAR
|
41
|
+
remainder_year = total % SIXTY_DAYS
|
42
|
+
|
43
|
+
LOGGER.debug("[01]:#{remainder_year}")
|
44
|
+
|
45
|
+
# 通余を使う
|
46
|
+
winter_solstice_minute = (remainder_year * REMAINDER_ALL_YEAR) % SIXTY_DAYS
|
47
|
+
|
48
|
+
LOGGER.debug("[02]:#{winter_solstice_minute}")
|
49
|
+
|
50
|
+
Cycle::Remainder.new(total: winter_solstice_minute)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../cycle/solar_term'
|
4
|
+
|
5
|
+
require_relative '../../const/number'
|
6
|
+
|
7
|
+
# :nodoc:
|
8
|
+
module Zakuro
|
9
|
+
# :nodoc:
|
10
|
+
module Daien
|
11
|
+
# :nodoc:
|
12
|
+
module Solar
|
13
|
+
#
|
14
|
+
# Adjustment 24気損益眺朒(ちょうじく)数
|
15
|
+
#
|
16
|
+
module Adjustment
|
17
|
+
#
|
18
|
+
# Row 行データ
|
19
|
+
#
|
20
|
+
class Row
|
21
|
+
# @return [Integer] 眺朒(ちょうじく)積
|
22
|
+
attr_reader :stack
|
23
|
+
# @return [Integer] 眺朒(ちょうじく)数
|
24
|
+
attr_reader :per_term
|
25
|
+
# @return [Integer] 毎日差
|
26
|
+
attr_reader :per_day
|
27
|
+
|
28
|
+
#
|
29
|
+
# 初期化
|
30
|
+
#
|
31
|
+
# @param [Integer] stack 眺朒(ちょうじく)積
|
32
|
+
# @param [Integer] per_term 眺朒(ちょうじく)数
|
33
|
+
# @param [Integer] per_day 毎日差
|
34
|
+
#
|
35
|
+
def initialize(stack:, per_term:, per_day:)
|
36
|
+
@stack = stack
|
37
|
+
@per_term = per_term
|
38
|
+
@per_day = per_day
|
39
|
+
end
|
40
|
+
|
41
|
+
#
|
42
|
+
# 文字化
|
43
|
+
#
|
44
|
+
# @return [String] 文字
|
45
|
+
#
|
46
|
+
def to_s
|
47
|
+
"stack:#{@stack}, per_term:#{@per_term}, per_day:#{@per_day}"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# @return [Array<Row>] 24気損益眺朒(ちょうじく)数
|
52
|
+
MAP = {
|
53
|
+
touji: Row.new(stack: 0.0, per_term: +13.4524, per_day: -0.1886), # 冬至(とうじ)
|
54
|
+
shoukan: Row.new(stack: +176.0, per_term: +10.5564, per_day: -0.1634), # 小寒(しょうかん)
|
55
|
+
daikan: Row.new(stack: +314.0, per_term: +8.0408, per_day: -0.1446), # 大寒(だいかん)
|
56
|
+
risshun: Row.new(stack: +418.0, per_term: +5.8160, per_day: -0.1318), # 立春(りっしゅん)
|
57
|
+
usui: Row.new(stack: +491.0, per_term: +3.7987, per_day: -0.1240), # 雨水(うすい)
|
58
|
+
keichitsu: Row.new(stack: +535.0, per_term: +1.9265, per_day: -0.1240), # 啓蟄(けいちつ)
|
59
|
+
shunbun: Row.new(stack: +551.0, per_term: -0.2048, per_day: -0.1178), # 春分(しゅんぶん)
|
60
|
+
seimei: Row.new(stack: +535.0, per_term: -1.9968, per_day: -0.1190), # 清明(せいめい)
|
61
|
+
kokuu: Row.new(stack: +491.0, per_term: -3.7956, per_day: -0.1240), # 穀雨(こくう)
|
62
|
+
rikka: Row.new(stack: +418.0, per_term: -5.6626, per_day: -0.1324), # 立夏(りっか)
|
63
|
+
shouman: Row.new(stack: +314.0, per_term: -7.6555, per_day: -0.1436), # 小満(しょうまん)
|
64
|
+
boushu: Row.new(stack: +176.0, per_term: -9.9405, per_day: -0.1436), # 芒種(ぼうしゅ)
|
65
|
+
geshi: Row.new(stack: 0.0, per_term: -12.0819, per_day: +0.1436), # 夏至(げし)
|
66
|
+
shousho: Row.new(stack: -176.0, per_term: -9.7018, per_day: +0.1324), # 小暑(しょうしょ)
|
67
|
+
taisho: Row.new(stack: -314.0, per_term: -7.5450, per_day: +0.1240), # 大暑(たいしょ)
|
68
|
+
risshuu: Row.new(stack: -418.0, per_term: -5.5634, per_day: +0.1190), # 立秋(りっしゅう)
|
69
|
+
shosho: Row.new(stack: -491.0, per_term: -3.7038, per_day: +0.1178), # 処暑(しょしょ)
|
70
|
+
hakuro: Row.new(stack: -535.0, per_term: -1.8954, per_day: +0.1178), # 白露(はくろ)
|
71
|
+
shuubun: Row.new(stack: -551.0, per_term: +0.1783, per_day: +0.1240), # 秋分(しゅうぶん)
|
72
|
+
kanro: Row.new(stack: -535.0, per_term: +2.0042, per_day: +0.1318), # 寒露(かんろ)
|
73
|
+
soukou: Row.new(stack: -491.0, per_term: +3.8950, per_day: +0.1446), # 霜降(そうこう)
|
74
|
+
rittou: Row.new(stack: -418.0, per_term: +5.9214, per_day: +0.1634), # 立冬(りっとう)
|
75
|
+
shousetsu: Row.new(stack: -314.0, per_term: +8.1610, per_day: +0.1886), # 小雪(しょうせつ)
|
76
|
+
taisetsu: Row.new(stack: -176.0, per_term: +10.9010, per_day: +0.1886) # 大雪(たいせつ)
|
77
|
+
}.freeze
|
78
|
+
|
79
|
+
#
|
80
|
+
# 24気損益眺朒(ちょうじく)数の行データを特定する
|
81
|
+
#
|
82
|
+
# @param [Integer] index 連番(二十四節気)
|
83
|
+
#
|
84
|
+
# @return [Row] 行データ
|
85
|
+
#
|
86
|
+
def self.specify(index:)
|
87
|
+
key = Cycle::SolarTerm::ORDER[index]
|
88
|
+
Adjustment::MAP[key].clone
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../../../calculation/stella/solar/abstract_average'
|
4
|
+
|
5
|
+
require_relative '../../const/remainder'
|
6
|
+
|
7
|
+
require_relative '../../cycle/solar_term'
|
8
|
+
|
9
|
+
require_relative '../origin/winter_solstice'
|
10
|
+
|
11
|
+
require_relative './location'
|
12
|
+
|
13
|
+
# :nodoc:
|
14
|
+
module Zakuro
|
15
|
+
# :nodoc:
|
16
|
+
module Daien
|
17
|
+
# :nodoc:
|
18
|
+
module Solar
|
19
|
+
#
|
20
|
+
# Average 平気(太陽軌道平均)
|
21
|
+
#
|
22
|
+
class Average < Calculation::Solar::AbstractAverage
|
23
|
+
#
|
24
|
+
# 初期化
|
25
|
+
#
|
26
|
+
# @param [Integer] western_year 西暦年
|
27
|
+
#
|
28
|
+
def initialize(western_year:)
|
29
|
+
solar_term = Average.first_solar_term(western_year: western_year)
|
30
|
+
super(solar_term: solar_term)
|
31
|
+
end
|
32
|
+
|
33
|
+
#
|
34
|
+
# 冬至から数えた1年データの月ごとに二十四節気を割り当てる
|
35
|
+
#
|
36
|
+
# @param [Array<Month>] annual_range 1年データ
|
37
|
+
#
|
38
|
+
# @return [Array<Month>] 1年データ
|
39
|
+
#
|
40
|
+
def set(annual_range:)
|
41
|
+
super(annual_range: annual_range)
|
42
|
+
end
|
43
|
+
|
44
|
+
#
|
45
|
+
# 計算開始する二十四節気を求める
|
46
|
+
#
|
47
|
+
# @param [Integer] western_year 西暦年
|
48
|
+
#
|
49
|
+
# @return [SolarTerm] 二十四節気
|
50
|
+
#
|
51
|
+
def self.first_solar_term(western_year:)
|
52
|
+
# 天正冬至
|
53
|
+
winter_solstice = Origin::WinterSolstice.get(western_year: western_year)
|
54
|
+
|
55
|
+
# 二十四節気(冬至)
|
56
|
+
solar_term = Cycle::SolarTerm.new(index: 0, remainder: winter_solstice)
|
57
|
+
|
58
|
+
first_solar_term_index = Average.calc_fist_solar_term_index(western_year: western_year)
|
59
|
+
|
60
|
+
# 対象の二十四節気まで戻す
|
61
|
+
solar_term.prev_by_index(first_solar_term_index)
|
62
|
+
|
63
|
+
solar_term
|
64
|
+
end
|
65
|
+
|
66
|
+
# :reek:TooManyStatements { max_statements: 6 }
|
67
|
+
|
68
|
+
#
|
69
|
+
# 計算開始する二十四節気番号を求める
|
70
|
+
#
|
71
|
+
# * 前提として入定気は冬至の手前にある
|
72
|
+
# * 例えば、定気が大雪であれば入定気は大雪の範囲内にある
|
73
|
+
# * 入定気は、定気の開始位置に重複しない限り、常に定気より後にある
|
74
|
+
# * 基本的に定気の一つ前から起算すれば、当時から求めた11月(閏10/閏11月)に二十四節気を割り当てられる
|
75
|
+
#
|
76
|
+
# @param [Integer] western_year 西暦年
|
77
|
+
#
|
78
|
+
# @return [Integer] 二十四節気番号
|
79
|
+
#
|
80
|
+
def self.calc_fist_solar_term_index(western_year:)
|
81
|
+
# 天正閏余
|
82
|
+
lunar_age = Origin::LunarAge.get(western_year: western_year)
|
83
|
+
|
84
|
+
solar_location = Solar::Location.new(lunar_age: lunar_age)
|
85
|
+
solar_location.run
|
86
|
+
|
87
|
+
solar_term_index = solar_location.index
|
88
|
+
|
89
|
+
# 入定気の一つ後の二十四節気まで戻す(ただし11月経朔が二十四節気上にある場合は戻さない)
|
90
|
+
# NOTE: 789年で大余0のパターンあり
|
91
|
+
solar_term_index += 1 unless solar_location.remainder.day.zero?
|
92
|
+
|
93
|
+
solar_term_index
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# :nodoc:
|
4
|
+
module Zakuro
|
5
|
+
# :nodoc:
|
6
|
+
module Daien
|
7
|
+
# :nodoc:
|
8
|
+
module Solar
|
9
|
+
#
|
10
|
+
# Interval 入気定日加減数(二十四節気の間隔)
|
11
|
+
#
|
12
|
+
module Interval
|
13
|
+
#
|
14
|
+
# 気策の 15-664.7 を加減する
|
15
|
+
#
|
16
|
+
# @note 『歴代天文律暦等志彙編 七』中華書房 p.2224 盈縮分の行で加減した
|
17
|
+
#
|
18
|
+
# @return [Hash<Symbol, Cycle::Remainder>] 一覧
|
19
|
+
MAP = {
|
20
|
+
# 冬至(とうじ)・大雪(たいせつ)
|
21
|
+
touji: Cycle::Remainder.new(day: 14, minute: 1351, second: 7), # -2353
|
22
|
+
taisetsu: Cycle::Remainder.new(day: 14, minute: 1351, second: 7),
|
23
|
+
# 小寒(しょうかん)・小雪(しょうせつ)
|
24
|
+
shoukan: Cycle::Remainder.new(day: 14, minute: 1859, second: 7), # -1845
|
25
|
+
shousetsu: Cycle::Remainder.new(day: 14, minute: 1859, second: 7),
|
26
|
+
# 大寒(だいかん)・立冬(りっとう)
|
27
|
+
daikan: Cycle::Remainder.new(day: 14, minute: 2314, second: 7), # -1390
|
28
|
+
rittou: Cycle::Remainder.new(day: 14, minute: 2314, second: 7),
|
29
|
+
# 立春(りっしゅん)・霜降(そうこう)
|
30
|
+
risshun: Cycle::Remainder.new(day: 14, minute: 2728, second: 7), # -976
|
31
|
+
soukou: Cycle::Remainder.new(day: 14, minute: 2728, second: 7),
|
32
|
+
# 雨水(うすい)・寒露(かんろ)
|
33
|
+
usui: Cycle::Remainder.new(day: 15, minute: 76, second: 7), # -588
|
34
|
+
kanro: Cycle::Remainder.new(day: 15, minute: 76, second: 7),
|
35
|
+
# 啓蟄(けいちつ)・秋分(しゅうぶん)
|
36
|
+
keichitsu: Cycle::Remainder.new(day: 15, minute: 450, second: 7), # -214
|
37
|
+
shuubun: Cycle::Remainder.new(day: 15, minute: 450, second: 7),
|
38
|
+
# 春分(しゅんぶん)・白露(はくろ)
|
39
|
+
shunbun: Cycle::Remainder.new(day: 15, minute: 878, second: 7), # +214
|
40
|
+
hakuro: Cycle::Remainder.new(day: 15, minute: 878, second: 7),
|
41
|
+
# 清明(せいめい)・処暑(しょしょ)
|
42
|
+
seimei: Cycle::Remainder.new(day: 15, minute: 1252, second: 7), # +588
|
43
|
+
shosho: Cycle::Remainder.new(day: 15, minute: 1252, second: 7),
|
44
|
+
# 穀雨(こくう)・立秋(りっしゅう)
|
45
|
+
kokuu: Cycle::Remainder.new(day: 15, minute: 1640, second: 7), # +976
|
46
|
+
risshuu: Cycle::Remainder.new(day: 15, minute: 1640, second: 7),
|
47
|
+
# 立夏(りっか)・大暑(たいしょ)
|
48
|
+
rikka: Cycle::Remainder.new(day: 15, minute: 2054, second: 7), # +1390
|
49
|
+
taisho: Cycle::Remainder.new(day: 15, minute: 2054, second: 7),
|
50
|
+
# 小満(しょうまん)・小暑(しょうしょ)
|
51
|
+
shouman: Cycle::Remainder.new(day: 15, minute: 2509, second: 7), # +1845
|
52
|
+
shousho: Cycle::Remainder.new(day: 15, minute: 2509, second: 7),
|
53
|
+
# 芒種(ぼうしゅ)・夏至(げし)
|
54
|
+
boushu: Cycle::Remainder.new(day: 15, minute: 3017, second: 7), # +2353
|
55
|
+
geshi: Cycle::Remainder.new(day: 15, minute: 3017, second: 7)
|
56
|
+
}.freeze
|
57
|
+
|
58
|
+
# @return [Array<Remainder>] 索引
|
59
|
+
LIST = [
|
60
|
+
MAP[:touji], # 0
|
61
|
+
MAP[:shoukan], # 1
|
62
|
+
MAP[:daikan], # 2
|
63
|
+
MAP[:risshun], # 3
|
64
|
+
MAP[:usui], # 4
|
65
|
+
MAP[:keichitsu], # 5
|
66
|
+
MAP[:shunbun], # 6
|
67
|
+
MAP[:seimei], # 7
|
68
|
+
MAP[:kokuu], # 8
|
69
|
+
MAP[:rikka], # 9
|
70
|
+
MAP[:shouman], # 10
|
71
|
+
MAP[:boushu], # 11
|
72
|
+
MAP[:geshi], # 12
|
73
|
+
MAP[:shousho], # 13
|
74
|
+
MAP[:taisho], # 14
|
75
|
+
MAP[:risshuu], # 15
|
76
|
+
MAP[:shosho], # 16
|
77
|
+
MAP[:hakuro], # 17
|
78
|
+
MAP[:shuubun], # 18
|
79
|
+
MAP[:kanro], # 19
|
80
|
+
MAP[:soukou], # 20
|
81
|
+
MAP[:rittou], # 21
|
82
|
+
MAP[:shousetsu], # 22
|
83
|
+
MAP[:taisetsu] # 23
|
84
|
+
].freeze
|
85
|
+
|
86
|
+
#
|
87
|
+
# 入気定日加減数を引き当てる
|
88
|
+
#
|
89
|
+
# @param [Integer] index 二十四節気番号
|
90
|
+
#
|
91
|
+
# @return [Cycle::Remainder] 入気定日加減数
|
92
|
+
#
|
93
|
+
def self.index_of(index)
|
94
|
+
LIST[index]
|
95
|
+
end
|
96
|
+
|
97
|
+
#
|
98
|
+
# 入気定日加減数の総数を返す
|
99
|
+
#
|
100
|
+
# @return [Integer] 入気定日加減数の総数
|
101
|
+
#
|
102
|
+
def self.size
|
103
|
+
LIST.size
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|