zakuro 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (27) hide show
  1. checksums.yaml +4 -4
  2. data/lib/zakuro/calculation/cycle/abstract_remainder.rb +12 -0
  3. data/lib/zakuro/calculation/range/full_range.rb +1 -1
  4. data/lib/zakuro/version.rb +1 -1
  5. data/lib/zakuro/version/senmyou/const/number.rb +51 -0
  6. data/lib/zakuro/version/senmyou/const/remainder.rb +43 -0
  7. data/lib/zakuro/version/senmyou/cycle/remainder.rb +4 -6
  8. data/lib/zakuro/version/senmyou/monthly/lunar_phase.rb +35 -54
  9. data/lib/zakuro/version/senmyou/range/annual_range.rb +9 -65
  10. data/lib/zakuro/version/senmyou/stella/lunar/adjustment.rb +237 -0
  11. data/lib/zakuro/version/senmyou/stella/lunar/localization.rb +45 -0
  12. data/lib/zakuro/version/senmyou/stella/lunar/location.rb +108 -0
  13. data/lib/zakuro/version/senmyou/stella/lunar/value.rb +89 -0
  14. data/lib/zakuro/version/senmyou/stella/origin/average_november.rb +34 -0
  15. data/lib/zakuro/version/senmyou/stella/origin/lunar_age.rb +62 -0
  16. data/lib/zakuro/version/senmyou/stella/origin/winter_solstice.rb +55 -0
  17. data/lib/zakuro/version/senmyou/stella/solar/adjustment.rb +93 -0
  18. data/lib/zakuro/version/senmyou/stella/solar/average.rb +175 -0
  19. data/lib/zakuro/version/senmyou/stella/solar/interval.rb +103 -0
  20. data/lib/zakuro/version/senmyou/stella/solar/location.rb +164 -0
  21. data/lib/zakuro/version/senmyou/stella/solar/value.rb +138 -0
  22. metadata +20 -11
  23. data/lib/zakuro/version/senmyou/stella/lunar_orbit.rb +0 -332
  24. data/lib/zakuro/version/senmyou/stella/solar_average.rb +0 -169
  25. data/lib/zakuro/version/senmyou/stella/solar_location.rb +0 -213
  26. data/lib/zakuro/version/senmyou/stella/solar_orbit.rb +0 -213
  27. data/lib/zakuro/version/senmyou/stella/winter_solstice.rb +0 -106
@@ -1,106 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../../../output/logger'
4
-
5
- # :nodoc:
6
- module Zakuro
7
- # :nodoc:
8
- module Senmyou
9
- # :reek:TooManyConstants
10
-
11
- #
12
- # WinterSolstice 冬至
13
- #
14
- module WinterSolstice
15
- # @return [Integer] 統法(1日=8400分)
16
- DAY = 8400
17
- # @return [Integer] 朔望月
18
- SYNODIC_MONTH = 248_057
19
- # @return [Integer] 一年
20
- YEAR = 3_068_055
21
- # @return [Integer] 通余: (YEAR - DAY * 12 * 30) = 44055
22
- REMAINDER_ALL_YEAR = 44_055
23
- # @return [Integer] 旬周(60日) 8400 * 60
24
- SIXTY_DAYS = 504_000
25
- # @return [Integer] 積年(甲子夜半朔旦冬至〜暦の開始前)
26
- TOTAL_YEAR = 7_070_138
27
- # @return [Integer] 暦の開始年(長慶2年)
28
- BEGIN_YEAR = 822
29
-
30
- # @return [Output::Logger] ロガー
31
- LOGGER = Output::Logger.new(location: 'winter_solstice')
32
-
33
- # :reek:TooManyStatements { max_statements: 6 }
34
-
35
- #
36
- # 対象年の前年の冬至を求める
37
- #
38
- # @param [Integer] western_year 西暦年
39
- #
40
- # @return [Remainder] 前年の冬至
41
- #
42
- def self.calc(western_year:)
43
- # 積年の開始から対象年までの年数
44
- total = TOTAL_YEAR + western_year - BEGIN_YEAR
45
- remainder_year = total % SIXTY_DAYS
46
-
47
- LOGGER.debug("[a01]:#{remainder_year}")
48
-
49
- # 通余を使う
50
- winter_solstice_minute = (remainder_year * REMAINDER_ALL_YEAR) % SIXTY_DAYS
51
-
52
- LOGGER.debug("[a02]:#{winter_solstice_minute}")
53
-
54
- Cycle::Remainder.new(total: winter_solstice_minute)
55
- end
56
-
57
- # :reek:TooManyStatements { max_statements: 7 }
58
-
59
- #
60
- # 対象年の天正閏余(冬至より前にある11月経朔との差 = 月齢)を算出する
61
- # 太陽と月の運動による補正値を算出し、その補正結果を返す
62
- #
63
- # @param [Integer] western_year 西暦年
64
- #
65
- # @return [Remainder] 天正閏余
66
- #
67
- def self.calc_moon_age(western_year:)
68
- # 積年の開始から対象年までの年数
69
- total = TOTAL_YEAR + western_year - BEGIN_YEAR
70
-
71
- # 12朔望月に対する1年の余り(単位:分)
72
- remainder_minute = YEAR - (SYNODIC_MONTH * 12)
73
-
74
- # 朔望月に含まれなかった余り(単位:年)
75
- remainder_year = total % SYNODIC_MONTH
76
-
77
- LOGGER.debug("[b01]: #{remainder_year}")
78
-
79
- # 天正閏余
80
- winter_solstice_age = remainder_minute * remainder_year % SYNODIC_MONTH
81
-
82
- LOGGER.debug("[b02]: #{winter_solstice_age}")
83
-
84
- # 大余・小余に変換する
85
- Cycle::Remainder.new(total: winter_solstice_age)
86
- end
87
-
88
- #
89
- # 11月経朔(冬至が含まれる月の1日)を求める
90
- #
91
- # @param [Integer] western_year 西暦年
92
- #
93
- # @return [Remainder] 11月経朔
94
- #
95
- def self.calc_averaged_last_november_1st(western_year:)
96
- # 冬至
97
- winter_solstice = calc(western_year: western_year)
98
- # 天正閏余
99
- winter_solstice_age = calc_moon_age(western_year: western_year)
100
-
101
- # 11月経朔
102
- winter_solstice.sub(winter_solstice_age)
103
- end
104
- end
105
- end
106
- end