zakuro 0.1.5 → 0.2.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/monthly/abstract_lunar_phase.rb +169 -0
- data/lib/zakuro/calculation/range/medieval_annual_range.rb +105 -0
- data/lib/zakuro/calculation/stella/lunar/abstract_location.rb +76 -0
- data/lib/zakuro/calculation/stella/lunar/choukei_value.rb +52 -0
- data/lib/zakuro/calculation/stella/solar/abstract_average.rb +117 -0
- data/lib/zakuro/calculation/stella/solar/abstract_location.rb +187 -0
- data/lib/zakuro/calculation/stella/solar/choukei_value.rb +136 -0
- data/lib/zakuro/calculation/type/old_float.rb +69 -0
- data/lib/zakuro/version.rb +1 -1
- data/lib/zakuro/version/gihou/const/number.rb +55 -0
- data/lib/zakuro/version/gihou/const/remainder.rb +56 -0
- data/lib/zakuro/version/gihou/cycle/remainder.rb +61 -0
- data/lib/zakuro/version/gihou/cycle/solar_term.rb +34 -0
- data/lib/zakuro/version/gihou/gihou.rb +23 -2
- data/lib/zakuro/version/gihou/monthly/lunar_phase.rb +106 -0
- data/lib/zakuro/version/gihou/range/annual_range.rb +39 -0
- data/lib/zakuro/version/gihou/stella/lunar/adjustment.rb +250 -0
- data/lib/zakuro/version/gihou/stella/lunar/localization.rb +44 -0
- data/lib/zakuro/version/gihou/stella/lunar/location.rb +86 -0
- data/lib/zakuro/version/gihou/stella/lunar/value.rb +74 -0
- data/lib/zakuro/version/gihou/stella/origin/average_november.rb +34 -0
- data/lib/zakuro/version/gihou/stella/origin/lunar_age.rb +62 -0
- data/lib/zakuro/version/gihou/stella/origin/winter_solstice.rb +55 -0
- data/lib/zakuro/version/gihou/stella/solar/adjustment.rb +93 -0
- data/lib/zakuro/version/gihou/stella/solar/average.rb +97 -0
- data/lib/zakuro/version/gihou/stella/solar/interval.rb +108 -0
- data/lib/zakuro/version/gihou/stella/solar/location.rb +61 -0
- data/lib/zakuro/version/gihou/stella/solar/value.rb +36 -0
- data/lib/zakuro/version/senmyou/const/number.rb +1 -1
- data/lib/zakuro/version/senmyou/const/remainder.rb +7 -1
- data/lib/zakuro/version/senmyou/cycle/solar_term.rb +4 -1
- data/lib/zakuro/version/senmyou/monthly/lunar_phase.rb +11 -111
- data/lib/zakuro/version/senmyou/range/annual_range.rb +5 -77
- data/lib/zakuro/version/senmyou/stella/lunar/localization.rb +2 -3
- data/lib/zakuro/version/senmyou/stella/lunar/location.rb +13 -28
- data/lib/zakuro/version/senmyou/stella/lunar/value.rb +5 -28
- data/lib/zakuro/version/senmyou/stella/solar/adjustment.rb +29 -29
- data/lib/zakuro/version/senmyou/stella/solar/average.rb +11 -89
- data/lib/zakuro/version/senmyou/stella/solar/location.rb +18 -121
- data/lib/zakuro/version/senmyou/stella/solar/value.rb +4 -103
- data/lib/zakuro/version/version_class_resolver.rb +4 -0
- metadata +28 -2
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative '../../../../calculation/stella/solar/abstract_location'
|
4
|
+
|
3
5
|
require_relative '../../const/remainder'
|
4
6
|
|
5
7
|
require_relative './interval'
|
@@ -13,150 +15,45 @@ module Zakuro
|
|
13
15
|
#
|
14
16
|
# Location 入定気
|
15
17
|
#
|
16
|
-
class Location
|
18
|
+
class Location < Calculation::Solar::AbstractLocation
|
17
19
|
# @return [Cycle::Remainder] 弦
|
18
20
|
QUARTER = Const::Remainder::Solar::QUARTER
|
19
21
|
|
20
|
-
# @return [True] 計算済み(前回計算あり)
|
21
|
-
# @return [False] 未計算(初回計算)
|
22
|
-
attr_reader :calculated
|
23
|
-
# @return [Integer] 連番
|
24
|
-
attr_reader :index
|
25
|
-
# @return [Cycle::Remainder] 大余小余
|
26
|
-
attr_reader :remainder
|
27
|
-
|
28
22
|
#
|
29
23
|
# 初期化
|
30
24
|
#
|
31
25
|
# @param [Cycle::Remainder] lunar_age 天正閏余(大余小余)
|
32
26
|
#
|
33
|
-
def initialize(lunar_age:
|
34
|
-
|
35
|
-
@index = -1
|
36
|
-
@remainder = lunar_age.clone
|
27
|
+
def initialize(lunar_age:)
|
28
|
+
super(lunar_age: lunar_age, quarter: QUARTER)
|
37
29
|
end
|
38
30
|
|
39
|
-
#
|
40
|
-
# 入定気を計算する
|
41
|
-
#
|
42
|
-
def run
|
43
|
-
return current if calculated
|
44
|
-
|
45
|
-
first
|
46
|
-
end
|
31
|
+
# :reek:UtilityFunction
|
47
32
|
|
48
33
|
#
|
49
|
-
#
|
50
|
-
#
|
51
|
-
# @return [True] 無効
|
52
|
-
# @return [False] 有効
|
53
|
-
#
|
54
|
-
def invalid?
|
55
|
-
@index == -1
|
56
|
-
end
|
57
|
-
|
58
|
-
#
|
59
|
-
# 弦の分だけ太陽地点を進める
|
60
|
-
#
|
61
|
-
def add_quarter
|
62
|
-
@remainder.add!(QUARTER)
|
63
|
-
end
|
64
|
-
|
65
|
-
private
|
66
|
-
|
67
|
-
#
|
68
|
-
# 2回目以降の計算をする
|
69
|
-
#
|
70
|
-
def current
|
71
|
-
decrease_recursively
|
72
|
-
end
|
73
|
-
|
34
|
+
# 二十四節気番号に対応する入気定日加減数を返す
|
74
35
|
#
|
75
|
-
#
|
36
|
+
# @note 継承のためクラスメソッドにしない
|
76
37
|
#
|
77
|
-
|
78
|
-
define_first
|
79
|
-
@calculated = true
|
80
|
-
end
|
81
|
-
|
38
|
+
# @param [Integer] index 二十四節気番号
|
82
39
|
#
|
83
|
-
#
|
40
|
+
# @return [Cycle::Remainder] 入気定日加減数
|
84
41
|
#
|
85
|
-
def
|
86
|
-
|
87
|
-
# 概要:
|
88
|
-
# * 太陽の運行による補正値は、二十四節気の気ごとに定められる
|
89
|
-
# * 11月経朔の前にある気を求め、それから11月経朔との間隔を求める
|
90
|
-
# * 気ごとの補正値と、気から11月経朔までにかかる補正値を求める
|
91
|
-
# 前提:
|
92
|
-
# * 11月経朔に関わる二十四節気は、時系列から順に、小雪・大雪・冬至である
|
93
|
-
# * 小雪〜大雪の間隔は小雪定数で、大雪〜冬至の間隔は大雪定数で決められている(24気損益眺朒(ちょうじく)数のこと)
|
94
|
-
# * 11月経朔は、この小雪〜冬至の間のいずれかにある
|
95
|
-
# 計算:
|
96
|
-
# 2パターンある
|
97
|
-
# (a) 大雪〜冬至にある場合
|
98
|
-
# *「大雪定数 >= 天正閏余」の場合を指す
|
99
|
-
# * * NOTE 資料では「より大きい(>)」とされるが、大雪そのものの場合は大雪から起算すべき
|
100
|
-
# * この場合は、大雪〜経朔の間隔を求める
|
101
|
-
# (b) 小雪〜大雪にある場合
|
102
|
-
# *「大雪定数 < 天正閏余」の場合を指す
|
103
|
-
# * この場合は、小雪〜経朔の間隔を求める
|
104
|
-
|
105
|
-
# NOTE: 上記パターンとは別に、稀だが立冬のパターンも存在する
|
106
|
-
# この場合は比較方法はそのままに立冬〜経朔の間隔を求める
|
107
|
-
|
108
|
-
# 大雪(23)/小雪(22)/立冬(21)
|
109
|
-
[23, 22, 21].each do |index|
|
110
|
-
prev(index: index)
|
111
|
-
|
112
|
-
break unless invalid?
|
113
|
-
end
|
114
|
-
|
115
|
-
# 立冬(21)を超える天正閏余は成立し得ない(1朔望月をはるかに超えることになる)
|
116
|
-
return unless invalid?
|
117
|
-
|
118
|
-
raise ArgumentError.new, 'invalid winster solstice age'
|
42
|
+
def interval(index:)
|
43
|
+
Interval.index_of(index)
|
119
44
|
end
|
120
45
|
|
121
|
-
#
|
122
|
-
# 大余小余の分だけ二十四節気を遡る
|
123
|
-
#
|
124
|
-
# @param [Integer] index 二十四節気番号
|
125
|
-
#
|
126
|
-
def prev(index:)
|
127
|
-
interval = Interval.index_of(index)
|
128
|
-
if remainder > interval
|
129
|
-
@remainder.sub!(interval)
|
130
|
-
return
|
131
|
-
end
|
132
|
-
|
133
|
-
# 入定気が確定する
|
134
|
-
@remainder = interval.sub(@remainder)
|
135
|
-
@index = index
|
136
|
-
end
|
46
|
+
# :reek:UtilityFunction
|
137
47
|
|
138
48
|
#
|
139
|
-
#
|
49
|
+
# 入気定日加減数の要素数を返す
|
140
50
|
#
|
141
|
-
|
142
|
-
@index += 1
|
143
|
-
@index = 0 if @index >= Interval.size
|
144
|
-
end
|
145
|
-
|
51
|
+
# @note 継承のためクラスメソッドにしない
|
146
52
|
#
|
147
|
-
#
|
53
|
+
# @return [Integer] 入気定日加減数の要素数
|
148
54
|
#
|
149
|
-
def
|
150
|
-
|
151
|
-
# 現在の二十四節気に留まる
|
152
|
-
return if remainder < interval
|
153
|
-
|
154
|
-
@remainder.sub!(interval)
|
155
|
-
|
156
|
-
next_index
|
157
|
-
|
158
|
-
# 再帰
|
159
|
-
decrease_recursively
|
55
|
+
def interval_size
|
56
|
+
Interval.size
|
160
57
|
end
|
161
58
|
end
|
162
59
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative '../../../../calculation/stella/solar/choukei_value'
|
4
|
+
|
3
5
|
require_relative '../../const/number'
|
4
6
|
|
5
7
|
require_relative './adjustment'
|
@@ -27,111 +29,10 @@ module Zakuro
|
|
27
29
|
def self.get(solar_location:)
|
28
30
|
remainder = solar_location.remainder
|
29
31
|
|
30
|
-
|
31
|
-
# 損益率/眺朒(ちょうじく)数
|
32
|
-
# パラメータ:
|
33
|
-
# a: 眺朒(ちょうじく)数の初日の値
|
34
|
-
# b: 損益率初日の値
|
35
|
-
# c: 損益率の毎日の差
|
36
|
-
# n: 定気の日から数えた日数
|
37
|
-
|
38
|
-
day_stack = calc_day_stack(remainder: remainder, adjustment: adjustment)
|
39
|
-
|
40
|
-
month_stack = calc_month_stack(stack: adjustment.stack, day: remainder.day,
|
41
|
-
per_term: adjustment.per_term, per_day:
|
42
|
-
adjustment.per_day)
|
43
|
-
|
44
|
-
# 冬至であれば眺朒数がプラスになり続けて損益率が「益」で、小雪であればマイナスの眺朒数がプラスされ続けて「損」
|
45
|
-
month_stack + day_stack
|
46
|
-
end
|
47
|
-
|
48
|
-
#
|
49
|
-
# 損益率を求める
|
50
|
-
#
|
51
|
-
# @param [Remainder] remainder 入定気
|
52
|
-
# @param [Adjustment::Item] adjustment 24気損益眺朒(ちょうじく)数
|
53
|
-
#
|
54
|
-
# @return [Integer] 損益率
|
55
|
-
#
|
56
|
-
def self.calc_day_stack(remainder:, adjustment:)
|
57
|
-
per_term = adjustment.per_term
|
58
|
-
per_day = adjustment.per_day
|
59
|
-
sign, ratio = calc_ratio(day: remainder.day, per_term: per_term, per_day: per_day)
|
60
|
-
|
61
|
-
calc_day_stack_from_ratio(sign: sign, ratio: ratio,
|
62
|
-
minute: remainder.minute)
|
63
|
-
end
|
64
|
-
private_class_method :calc_day_stack
|
65
|
-
|
66
|
-
# :reek:TooManyStatements { max_statements: 6 }
|
67
|
-
|
68
|
-
#
|
69
|
-
# 大余に対応する損益率を求める
|
70
|
-
# 損益率 = b + n * c
|
71
|
-
#
|
72
|
-
# @param [Integer] day 大余
|
73
|
-
# @param [Integer] per_term 眺朒(ちょうじく)数
|
74
|
-
# @param [Integer] per_day 毎日差
|
75
|
-
#
|
76
|
-
# @return [Integer] 正負
|
77
|
-
# @return [Integer] 大余に対応する損益率
|
78
|
-
#
|
79
|
-
def self.calc_ratio(day:, per_term:, per_day:)
|
80
|
-
ratio = per_term + day * per_day
|
81
|
-
sign = 1
|
82
|
-
if ratio.negative?
|
83
|
-
sign = -1
|
84
|
-
ratio *= sign
|
85
|
-
end
|
86
|
-
# 小数点以下は無視する
|
87
|
-
ratio = ratio.floor
|
88
|
-
|
89
|
-
[sign, ratio]
|
90
|
-
end
|
91
|
-
private_class_method :calc_ratio
|
92
|
-
|
93
|
-
#
|
94
|
-
# 小余を含めた損益率を求める
|
95
|
-
#
|
96
|
-
# @param [Integer] sign 正負(大余に対応する損益率)
|
97
|
-
# @param [Integer] ratio 大余に対応する損益率
|
98
|
-
# @param [Integer] minute 小余
|
99
|
-
#
|
100
|
-
# @return [Integer] 小余を含めた損益率
|
101
|
-
#
|
102
|
-
def self.calc_day_stack_from_ratio(sign:, ratio:, minute:)
|
103
|
-
minute_stack = ratio * minute
|
104
|
-
day_stack = (minute_stack / DAY).floor
|
105
|
-
# 四捨五入
|
106
|
-
# NOTE 資料では「この余りが4200をこえていれば切り上げる」とあり「>=」とした
|
107
|
-
# 1612年の7月(慶長17年7月)が境界値4200だが、繰り上げを行なっていたため
|
108
|
-
day_stack += 1 if minute_stack % DAY >= (DAY / 2)
|
109
|
-
day_stack *= sign
|
110
|
-
|
111
|
-
day_stack
|
112
|
-
end
|
113
|
-
private_class_method :calc_day_stack_from_ratio
|
114
|
-
|
115
|
-
# :reek:LongParameterList { max_params: 4 }
|
32
|
+
row = Adjustment.specify(index: solar_location.index)
|
116
33
|
|
117
|
-
|
118
|
-
# 眺朒(ちょうじく)数を求める
|
119
|
-
# 眺朒(ちょうじく)数 = a + (n * b) + (1/2)n(n-1)c
|
120
|
-
#
|
121
|
-
# @param [Integer] stack 眺朒(ちょうじく)積
|
122
|
-
# @param [Integer] day 大余
|
123
|
-
# @param [Integer] per_term 眺朒(ちょうじく)数
|
124
|
-
# @param [Integer] per_day 毎日差f
|
125
|
-
#
|
126
|
-
# @return [Integer] 眺朒(ちょうじく)数
|
127
|
-
#
|
128
|
-
def self.calc_month_stack(stack:, day:, per_term:, per_day:)
|
129
|
-
month_stack = stack + day * per_term + \
|
130
|
-
(1 / 2.0) * (day * (day - 1) * per_day)
|
131
|
-
# 切り捨て(プラスマイナスに関わらず小数点以下切り捨て)
|
132
|
-
month_stack.negative? ? month_stack.ceil : month_stack.floor
|
34
|
+
Calculation::Solar::ChoukeiValue.get(remainder: remainder, row: row)
|
133
35
|
end
|
134
|
-
private_class_method :calc_month_stack
|
135
36
|
end
|
136
37
|
end
|
137
38
|
end
|
@@ -1,5 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative './gihou/cycle/remainder'
|
4
|
+
require_relative './gihou/cycle/solar_term'
|
5
|
+
require_relative './gihou/range/annual_range'
|
6
|
+
|
3
7
|
require_relative './senmyou/cycle/remainder'
|
4
8
|
require_relative './senmyou/cycle/solar_term'
|
5
9
|
require_relative './senmyou/range/annual_range'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zakuro
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- pldb
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-06-06 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: mainly lunar solar calendar
|
14
14
|
email:
|
@@ -46,18 +46,26 @@ files:
|
|
46
46
|
- lib/zakuro/calculation/cycle/abstract_remainder.rb
|
47
47
|
- lib/zakuro/calculation/cycle/abstract_solar_term.rb
|
48
48
|
- lib/zakuro/calculation/cycle/zodiac.rb
|
49
|
+
- lib/zakuro/calculation/monthly/abstract_lunar_phase.rb
|
49
50
|
- lib/zakuro/calculation/monthly/first_day.rb
|
50
51
|
- lib/zakuro/calculation/monthly/initialized_month.rb
|
51
52
|
- lib/zakuro/calculation/monthly/month.rb
|
52
53
|
- lib/zakuro/calculation/monthly/month_label.rb
|
53
54
|
- lib/zakuro/calculation/monthly/operated_month.rb
|
54
55
|
- lib/zakuro/calculation/range/full_range.rb
|
56
|
+
- lib/zakuro/calculation/range/medieval_annual_range.rb
|
55
57
|
- lib/zakuro/calculation/range/operated_range.rb
|
56
58
|
- lib/zakuro/calculation/range/operated_solar_terms.rb
|
57
59
|
- lib/zakuro/calculation/range/transfer/western_date_allocation.rb
|
58
60
|
- lib/zakuro/calculation/range/transfer/year_boundary.rb
|
59
61
|
- lib/zakuro/calculation/specifier/single_day.rb
|
62
|
+
- lib/zakuro/calculation/stella/lunar/abstract_location.rb
|
63
|
+
- lib/zakuro/calculation/stella/lunar/choukei_value.rb
|
64
|
+
- lib/zakuro/calculation/stella/solar/abstract_average.rb
|
65
|
+
- lib/zakuro/calculation/stella/solar/abstract_location.rb
|
66
|
+
- lib/zakuro/calculation/stella/solar/choukei_value.rb
|
60
67
|
- lib/zakuro/calculation/summary/single.rb
|
68
|
+
- lib/zakuro/calculation/type/old_float.rb
|
61
69
|
- lib/zakuro/condition.rb
|
62
70
|
- lib/zakuro/era/japan/gengou.rb
|
63
71
|
- lib/zakuro/era/japan/gengou/parser.rb
|
@@ -87,7 +95,25 @@ files:
|
|
87
95
|
- lib/zakuro/version/abstract_version.rb
|
88
96
|
- lib/zakuro/version/context.rb
|
89
97
|
- lib/zakuro/version/genka/genka.rb
|
98
|
+
- lib/zakuro/version/gihou/const/number.rb
|
99
|
+
- lib/zakuro/version/gihou/const/remainder.rb
|
100
|
+
- lib/zakuro/version/gihou/cycle/remainder.rb
|
101
|
+
- lib/zakuro/version/gihou/cycle/solar_term.rb
|
90
102
|
- lib/zakuro/version/gihou/gihou.rb
|
103
|
+
- lib/zakuro/version/gihou/monthly/lunar_phase.rb
|
104
|
+
- lib/zakuro/version/gihou/range/annual_range.rb
|
105
|
+
- lib/zakuro/version/gihou/stella/lunar/adjustment.rb
|
106
|
+
- lib/zakuro/version/gihou/stella/lunar/localization.rb
|
107
|
+
- lib/zakuro/version/gihou/stella/lunar/location.rb
|
108
|
+
- lib/zakuro/version/gihou/stella/lunar/value.rb
|
109
|
+
- lib/zakuro/version/gihou/stella/origin/average_november.rb
|
110
|
+
- lib/zakuro/version/gihou/stella/origin/lunar_age.rb
|
111
|
+
- lib/zakuro/version/gihou/stella/origin/winter_solstice.rb
|
112
|
+
- lib/zakuro/version/gihou/stella/solar/adjustment.rb
|
113
|
+
- lib/zakuro/version/gihou/stella/solar/average.rb
|
114
|
+
- lib/zakuro/version/gihou/stella/solar/interval.rb
|
115
|
+
- lib/zakuro/version/gihou/stella/solar/location.rb
|
116
|
+
- lib/zakuro/version/gihou/stella/solar/value.rb
|
91
117
|
- lib/zakuro/version/gregorio/gregorio.rb
|
92
118
|
- lib/zakuro/version/houryaku/houryaku.rb
|
93
119
|
- lib/zakuro/version/joukyou/joukyou.rb
|