zakuro 0.1.4 → 0.1.5
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 +12 -0
- data/lib/zakuro/calculation/range/full_range.rb +1 -1
- data/lib/zakuro/version.rb +1 -1
- data/lib/zakuro/version/senmyou/const/number.rb +51 -0
- data/lib/zakuro/version/senmyou/const/remainder.rb +43 -0
- data/lib/zakuro/version/senmyou/cycle/remainder.rb +4 -6
- data/lib/zakuro/version/senmyou/monthly/lunar_phase.rb +35 -54
- data/lib/zakuro/version/senmyou/range/annual_range.rb +9 -65
- data/lib/zakuro/version/senmyou/stella/lunar/adjustment.rb +237 -0
- data/lib/zakuro/version/senmyou/stella/lunar/localization.rb +45 -0
- data/lib/zakuro/version/senmyou/stella/lunar/location.rb +108 -0
- data/lib/zakuro/version/senmyou/stella/lunar/value.rb +89 -0
- data/lib/zakuro/version/senmyou/stella/origin/average_november.rb +34 -0
- data/lib/zakuro/version/senmyou/stella/origin/lunar_age.rb +62 -0
- data/lib/zakuro/version/senmyou/stella/origin/winter_solstice.rb +55 -0
- data/lib/zakuro/version/senmyou/stella/solar/adjustment.rb +93 -0
- data/lib/zakuro/version/senmyou/stella/solar/average.rb +175 -0
- data/lib/zakuro/version/senmyou/stella/solar/interval.rb +103 -0
- data/lib/zakuro/version/senmyou/stella/solar/location.rb +164 -0
- data/lib/zakuro/version/senmyou/stella/solar/value.rb +138 -0
- metadata +20 -11
- data/lib/zakuro/version/senmyou/stella/lunar_orbit.rb +0 -332
- data/lib/zakuro/version/senmyou/stella/solar_average.rb +0 -169
- data/lib/zakuro/version/senmyou/stella/solar_location.rb +0 -213
- data/lib/zakuro/version/senmyou/stella/solar_orbit.rb +0 -213
- data/lib/zakuro/version/senmyou/stella/winter_solstice.rb +0 -106
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a5bbb00f73830eff0f9e912c0fa0c10d49d7849b3f46395c19de8ec1f71f8012
|
4
|
+
data.tar.gz: e95b80813e7ce382e0c5fce6a62382d3c26383db6f0b7e64e82bd1f005a6f15c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a3bb973f87a0bb6e3d3caffca76e9cc57cf5748e16bb3e9f87b3e9ffe2307682646aa08077ad6685a04ec282d255aa0f3ecf5992d2595f89bcd00b364aa22f45
|
7
|
+
data.tar.gz: f85ca93529ec87eb15e97f2564509429b95d8433c22d3141bdef26fa79154689030d9552ca38e8e81812289d5adf272b8445e510a21967cd9b517c805e6956a5
|
@@ -331,6 +331,18 @@ module Zakuro
|
|
331
331
|
@day * @base_day + @minute
|
332
332
|
end
|
333
333
|
|
334
|
+
#
|
335
|
+
# 小余(秒切り捨て)を返す
|
336
|
+
#
|
337
|
+
# @note 切り捨て前に繰り上げる
|
338
|
+
#
|
339
|
+
# @return [Integer] 小余(秒切り捨て)
|
340
|
+
#
|
341
|
+
def floor_minute
|
342
|
+
result = @minute + @second / @base_minute
|
343
|
+
result.floor
|
344
|
+
end
|
345
|
+
|
334
346
|
#
|
335
347
|
# 大余に四捨五入した結果を返す(秒は除外する)
|
336
348
|
#
|
data/lib/zakuro/version.rb
CHANGED
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# :nodoc:
|
4
|
+
module Zakuro
|
5
|
+
# :nodoc:
|
6
|
+
module Senmyou
|
7
|
+
#
|
8
|
+
# Const 定数
|
9
|
+
#
|
10
|
+
module Const
|
11
|
+
#
|
12
|
+
# Number 数値
|
13
|
+
#
|
14
|
+
module Number
|
15
|
+
#
|
16
|
+
# Cycle 周期
|
17
|
+
#
|
18
|
+
module Cycle
|
19
|
+
# @return [Integer] 統法(1日=8400分)
|
20
|
+
DAY = 8400
|
21
|
+
# @return [Integer] 暦周(1近日点)
|
22
|
+
ANOMALISTIC_MONTH = 231_458.19
|
23
|
+
# @return [Integer] 朔望月
|
24
|
+
SYNODIC_MONTH = 248_057
|
25
|
+
# @return [Integer] 一年
|
26
|
+
YEAR = 3_068_055
|
27
|
+
end
|
28
|
+
|
29
|
+
#
|
30
|
+
# Derivation 導出
|
31
|
+
#
|
32
|
+
module Derivation
|
33
|
+
# @return [Integer] 通余: (YEAR - DAY * 12 * 30) = 44055
|
34
|
+
REMAINDER_ALL_YEAR = 44_055
|
35
|
+
# @return [Integer] 旬周(60日) DAY * 60
|
36
|
+
SIXTY_DAYS = 504_000
|
37
|
+
end
|
38
|
+
|
39
|
+
#
|
40
|
+
# 累積
|
41
|
+
#
|
42
|
+
module Stack
|
43
|
+
# @return [Integer] 積年(甲子夜半朔旦冬至〜暦の開始前)
|
44
|
+
TOTAL_YEAR = 7_070_138
|
45
|
+
# @return [Integer] 暦の開始年(長慶2年)
|
46
|
+
BEGIN_YEAR = 822
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../cycle/remainder'
|
4
|
+
|
5
|
+
# :nodoc:
|
6
|
+
module Zakuro
|
7
|
+
# :nodoc:
|
8
|
+
module Senmyou
|
9
|
+
#
|
10
|
+
# Const 定数
|
11
|
+
#
|
12
|
+
module Const
|
13
|
+
#
|
14
|
+
# Remainder 大余小余
|
15
|
+
#
|
16
|
+
module Remainder
|
17
|
+
#
|
18
|
+
# Solar 太陽
|
19
|
+
#
|
20
|
+
module Solar
|
21
|
+
# @return [Cycle::Remainder] 気策(24分の1年)
|
22
|
+
SOLAR_TERM_AVERAGE = Cycle::Remainder.new(day: 15, minute: 1835, second: 5)
|
23
|
+
# @return [Cycle::Remainder] 弦(1分=8秒)
|
24
|
+
QUARTER = Cycle::Remainder.new(day: 7, minute: 3214, second: 2)
|
25
|
+
end
|
26
|
+
|
27
|
+
#
|
28
|
+
# Lunar 月
|
29
|
+
#
|
30
|
+
module Lunar
|
31
|
+
# @return [Cycle::LunarRemainder] 暦中日
|
32
|
+
# @note ANOMALISTIC_MONTH の半分に相当する
|
33
|
+
HALF_ANOMALISTIC_MONTH = \
|
34
|
+
Cycle::LunarRemainder.new(day: 13, minute: 6529, second: 9.5)
|
35
|
+
# @return [Cycle::LunarRemainder] 入暦上限
|
36
|
+
LIMIT = Cycle::LunarRemainder.new(day: 14, minute: 6529, second: 0)
|
37
|
+
# @return [Cycle::LunarRemainder] 弦(1分=100秒)
|
38
|
+
QUARTER = Cycle::LunarRemainder.new(day: 7, minute: 3214, second: 25)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
3
|
require_relative '../../../calculation/cycle/abstract_remainder'
|
4
4
|
|
5
|
+
require_relative '../const/number'
|
6
|
+
|
5
7
|
# :nodoc:
|
6
8
|
module Zakuro
|
7
9
|
# :nodoc:
|
@@ -17,8 +19,6 @@ module Zakuro
|
|
17
19
|
# * 十干十二支(60日)を上限とした「日時分秒」の情報で、日付(date)/時刻(time)と部分的に重なる概念
|
18
20
|
#
|
19
21
|
class Remainder < Calculation::Cycle::AbstractRemainder
|
20
|
-
# @return [Integer] 統法(1日=8400分)
|
21
|
-
DAY = 8400
|
22
22
|
# @return [Integer] 分(1分=8秒)
|
23
23
|
MINUTE = 8
|
24
24
|
|
@@ -31,7 +31,7 @@ module Zakuro
|
|
31
31
|
# @param [Integer] total 繰り上げなしの小余
|
32
32
|
#
|
33
33
|
def initialize(day: -1, minute: -1, second: -1, total: -1)
|
34
|
-
super(base_day: DAY, base_mitune: MINUTE,
|
34
|
+
super(base_day: Const::Number::Cycle::DAY, base_mitune: MINUTE,
|
35
35
|
day: day, minute: minute, second: second, total: total)
|
36
36
|
end
|
37
37
|
end
|
@@ -40,8 +40,6 @@ module Zakuro
|
|
40
40
|
# LunarRemainder 月の位相計算向け時刻情報(大余小余)
|
41
41
|
#
|
42
42
|
class LunarRemainder < Calculation::Cycle::AbstractRemainder
|
43
|
-
# @return [Integer] 統法(1日=8400分)
|
44
|
-
DAY = 8400
|
45
43
|
# @return [Integer] 分(1分=100秒)
|
46
44
|
MINUTE = 100
|
47
45
|
|
@@ -54,7 +52,7 @@ module Zakuro
|
|
54
52
|
# @param [Integer] total 繰り上げなしの小余
|
55
53
|
#
|
56
54
|
def initialize(day: -1, minute: -1, second: -1, total: -1)
|
57
|
-
super(base_day: DAY, base_mitune: MINUTE,
|
55
|
+
super(base_day: Const::Number::Cycle::DAY, base_mitune: MINUTE,
|
58
56
|
day: day, minute: minute, second: second, total: total)
|
59
57
|
end
|
60
58
|
end
|
@@ -2,7 +2,15 @@
|
|
2
2
|
|
3
3
|
require_relative '../../../output/logger'
|
4
4
|
|
5
|
-
require_relative '../
|
5
|
+
require_relative '../const/remainder'
|
6
|
+
|
7
|
+
require_relative '../stella/solar/location'
|
8
|
+
require_relative '../stella/solar/value'
|
9
|
+
require_relative '../stella/lunar/location'
|
10
|
+
require_relative '../stella/lunar/value'
|
11
|
+
|
12
|
+
require_relative '../stella/origin/lunar_age'
|
13
|
+
require_relative '../stella/origin/average_november'
|
6
14
|
|
7
15
|
# :nodoc:
|
8
16
|
module Zakuro
|
@@ -10,21 +18,12 @@ module Zakuro
|
|
10
18
|
module Senmyou
|
11
19
|
# :nodoc:
|
12
20
|
module Monthly
|
13
|
-
# :reek:TooManyInstanceVariables { max_instance_variables: 7 }
|
14
|
-
|
15
21
|
#
|
16
22
|
# LunarPhase 月の位相
|
17
23
|
#
|
18
24
|
class LunarPhase
|
19
|
-
#
|
20
|
-
|
21
|
-
#
|
22
|
-
module QuarterMoon
|
23
|
-
# @return [Remainder] 弦(1分=8秒)
|
24
|
-
DEFAULT = Cycle::Remainder.new(day: 7, minute: 3214, second: 2)
|
25
|
-
# @return [Remainder] 弦(1分=100秒)
|
26
|
-
BASE_HUNDRED = Cycle::LunarRemainder.new(day: 7, minute: 3214, second: 25)
|
27
|
-
end
|
25
|
+
# @return [Cycle::Remainder] 弦
|
26
|
+
QUARTER = Const::Remainder::Solar::QUARTER
|
28
27
|
|
29
28
|
# @return [Output::Logger] ロガー
|
30
29
|
LOGGER = Output::Logger.new(location: 'lunar_phase')
|
@@ -32,20 +31,10 @@ module Zakuro
|
|
32
31
|
# @return [Array<String>] 月内の弦
|
33
32
|
PHASE_INDEXES = %w[朔日 上弦 望月 下弦].freeze
|
34
33
|
|
35
|
-
# @return [Integer] 西暦年
|
36
|
-
attr_reader :western_year
|
37
34
|
# @return [Remainder]] 経
|
38
35
|
attr_reader :average_remainder
|
39
|
-
# @return [True] 初回計算
|
40
|
-
# @return [False] 次回以降計算
|
41
|
-
attr_reader :first
|
42
36
|
# @return [SolarTerm] 二十四節気(入定気)
|
43
37
|
attr_reader :solar_term
|
44
|
-
# @return [Remainder] 入暦
|
45
|
-
attr_reader :moon_remainder
|
46
|
-
# @return [True] 進(遠地点より数える)
|
47
|
-
# @return [False] 退(近地点より数える)
|
48
|
-
attr_reader :is_forward
|
49
38
|
# @return [Integer] 弦
|
50
39
|
attr_reader :phase_index
|
51
40
|
|
@@ -55,21 +44,17 @@ module Zakuro
|
|
55
44
|
# @param [Integer] western_year 西暦年
|
56
45
|
#
|
57
46
|
def initialize(western_year:)
|
58
|
-
@western_year = western_year
|
59
47
|
# 経
|
60
|
-
@average_remainder =
|
61
|
-
western_year: @western_year
|
62
|
-
)
|
48
|
+
@average_remainder = Origin::AverageNovember.get(western_year: western_year)
|
63
49
|
# 天正閏余
|
64
|
-
|
65
|
-
WinterSolstice.calc_moon_age(western_year: @western_year)
|
50
|
+
lunar_age = Origin::LunarAge.get(western_year: western_year)
|
66
51
|
# 入定気
|
67
|
-
@
|
52
|
+
@solar_location = Solar::Location.new(lunar_age: lunar_age)
|
68
53
|
# 入暦
|
69
|
-
@
|
70
|
-
|
71
|
-
|
72
|
-
|
54
|
+
@lunar_location = Lunar::Location.new(
|
55
|
+
western_year: western_year,
|
56
|
+
lunar_age: Cycle::LunarRemainder.new(total: 0).add!(lunar_age)
|
57
|
+
)
|
73
58
|
|
74
59
|
# 弦
|
75
60
|
@phase_index = 0
|
@@ -83,8 +68,6 @@ module Zakuro
|
|
83
68
|
def next_phase
|
84
69
|
adjusted = current_remainder
|
85
70
|
|
86
|
-
@first = false if @first
|
87
|
-
|
88
71
|
add_quarter_moon_size
|
89
72
|
|
90
73
|
adjusted
|
@@ -120,7 +103,7 @@ module Zakuro
|
|
120
103
|
end
|
121
104
|
|
122
105
|
#
|
123
|
-
#
|
106
|
+
# 朔月(月初)であるか
|
124
107
|
#
|
125
108
|
# @return [True] 朔月である
|
126
109
|
# @return [False] 朔月ではない
|
@@ -183,38 +166,36 @@ module Zakuro
|
|
183
166
|
# @return [Integer] 太陽運動の補正値
|
184
167
|
#
|
185
168
|
def correction_solar_value
|
186
|
-
@
|
187
|
-
|
188
|
-
)
|
189
|
-
debug("@solar_term.remainder: #{@solar_term.remainder.format(form: '%d-%d.%d')}")
|
190
|
-
debug("@solar_term.index: #{@solar_term.index}")
|
169
|
+
@solar_location.run
|
170
|
+
debug("@solar_term.remainder: #{@solar_location.remainder.format(form: '%d-%d.%d')}")
|
171
|
+
debug("@solar_term.index: #{@solar_location.index}")
|
191
172
|
|
192
|
-
|
173
|
+
Solar::Value.get(solar_location: @solar_location)
|
193
174
|
end
|
194
175
|
|
176
|
+
# :reek:TooManyStatements { max_statements: 6 }
|
177
|
+
|
195
178
|
#
|
196
179
|
# 月運動の補正値を得る
|
197
180
|
#
|
198
181
|
# @return [Integer] 月運動の補正値
|
199
182
|
#
|
200
183
|
def correction_moon_value
|
201
|
-
@
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
first: @first)
|
184
|
+
@lunar_location.run
|
185
|
+
|
186
|
+
remainder = @lunar_location.remainder
|
187
|
+
forward = @lunar_location.forward
|
206
188
|
|
207
|
-
debug("
|
208
|
-
debug("
|
189
|
+
debug("[lunar]remainder.format: #{remainder.format}")
|
190
|
+
debug("[lunar]forward: #{forward}")
|
209
191
|
|
210
|
-
|
211
|
-
is_forward: @is_forward)
|
192
|
+
Lunar::Value.get(remainder: remainder, forward: forward)
|
212
193
|
end
|
213
194
|
|
214
195
|
def add_quarter_moon_size
|
215
|
-
@average_remainder.add!(
|
216
|
-
@
|
217
|
-
@
|
196
|
+
@average_remainder.add!(QUARTER)
|
197
|
+
@solar_location.add_quarter
|
198
|
+
@lunar_location.add_quarter
|
218
199
|
|
219
200
|
next_phase_index
|
220
201
|
end
|
@@ -5,10 +5,13 @@ require_relative '../cycle/remainder'
|
|
5
5
|
require_relative '../cycle/solar_term'
|
6
6
|
require_relative '../../../calculation/monthly/initialized_month'
|
7
7
|
require_relative '../monthly/lunar_phase'
|
8
|
-
require_relative '../stella/
|
9
|
-
require_relative '../stella/
|
10
|
-
require_relative '../stella/
|
11
|
-
require_relative '../stella/
|
8
|
+
require_relative '../stella/lunar/location'
|
9
|
+
require_relative '../stella/lunar/value'
|
10
|
+
require_relative '../stella/solar/average'
|
11
|
+
require_relative '../stella/solar/location'
|
12
|
+
require_relative '../stella/solar/value'
|
13
|
+
require_relative '../stella/origin/lunar_age'
|
14
|
+
require_relative '../stella/origin/average_november'
|
12
15
|
|
13
16
|
# :nodoc:
|
14
17
|
module Zakuro
|
@@ -25,37 +28,6 @@ module Zakuro
|
|
25
28
|
|
26
29
|
# :reek:TooManyStatements { max_statements: 6 }
|
27
30
|
|
28
|
-
#
|
29
|
-
# 11月定朔(冬至が含まれる月の1日:補正済)を求める
|
30
|
-
#
|
31
|
-
# @param [Integer] western_year 西暦年
|
32
|
-
#
|
33
|
-
# @return [Remainder] 11月定朔
|
34
|
-
#
|
35
|
-
def self.calc_last_november_1st(western_year:)
|
36
|
-
# 天正閏余
|
37
|
-
winter_solstice_age = \
|
38
|
-
WinterSolstice.calc_moon_age(western_year: western_year)
|
39
|
-
# 11月経朔
|
40
|
-
november_1st = \
|
41
|
-
WinterSolstice.calc_averaged_last_november_1st(western_year: western_year)
|
42
|
-
# 11月定朔
|
43
|
-
|
44
|
-
# 補正
|
45
|
-
correction_value = correction_value_on_last_november_1st(
|
46
|
-
winter_solstice_age: winter_solstice_age,
|
47
|
-
western_year: western_year
|
48
|
-
)
|
49
|
-
|
50
|
-
result = november_1st.add(Cycle::Remainder.new(day: 0, minute: correction_value,
|
51
|
-
second: 0))
|
52
|
-
# 進朔
|
53
|
-
result.up_on_new_moon!
|
54
|
-
result
|
55
|
-
end
|
56
|
-
|
57
|
-
# :reek:TooManyStatements { max_statements: 6 }
|
58
|
-
|
59
31
|
#
|
60
32
|
# 一覧取得する
|
61
33
|
#
|
@@ -67,12 +39,12 @@ module Zakuro
|
|
67
39
|
#
|
68
40
|
# @return [Array<Month>] 1年データ
|
69
41
|
#
|
70
|
-
def self.
|
42
|
+
def self.get(context:, western_year:)
|
71
43
|
annual_range = initialized_annual_range(context: context, western_year: western_year)
|
72
44
|
|
73
45
|
apply_big_and_small_of_the_month(annual_range: annual_range)
|
74
46
|
|
75
|
-
solar_average =
|
47
|
+
solar_average = Solar::Average.new(western_year: western_year)
|
76
48
|
solar_average.set(annual_range: annual_range)
|
77
49
|
|
78
50
|
# 月間隔を取得するためだけの末尾要素を削除
|
@@ -81,34 +53,6 @@ module Zakuro
|
|
81
53
|
initialize_month_label(annual_range: annual_range)
|
82
54
|
end
|
83
55
|
|
84
|
-
#
|
85
|
-
# 11月定朔の補正値を求める
|
86
|
-
#
|
87
|
-
# @param [Remainder] winter_solstice_age 天正閏余
|
88
|
-
# @param [Integer] western_year 西暦年
|
89
|
-
#
|
90
|
-
# @return [Integer] 補正値
|
91
|
-
#
|
92
|
-
def self.correction_value_on_last_november_1st(winter_solstice_age:, western_year:)
|
93
|
-
# 補正
|
94
|
-
solar_term = Cycle::SolarTerm.new(
|
95
|
-
remainder: winter_solstice_age
|
96
|
-
)
|
97
|
-
solar_term = \
|
98
|
-
SolarLocation.get(
|
99
|
-
solar_term: solar_term
|
100
|
-
)
|
101
|
-
|
102
|
-
moon_remainder, is_forward = LunarOrbit.calc_moon_point(
|
103
|
-
remainder: winter_solstice_age, western_year: western_year
|
104
|
-
)
|
105
|
-
|
106
|
-
SolarOrbit.calc_sun_orbit_value(solar_term: solar_term) +
|
107
|
-
LunarOrbit.calc_moon_orbit_value(remainder_month: moon_remainder,
|
108
|
-
is_forward: is_forward)
|
109
|
-
end
|
110
|
-
private_class_method :correction_value_on_last_november_1st
|
111
|
-
|
112
56
|
#
|
113
57
|
# 1年データを取得する
|
114
58
|
#
|