Class: Zakuro::Version::Senmyou::Solar::Average

Inherits:
Calculation::Solar::AbstractAverage show all
Defined in:
lib/zakuro/version/senmyou/stella/solar/average.rb

Overview

Average 平気(太陽軌道平均)

Instance Attribute Summary

Attributes inherited from Calculation::Solar::AbstractAverage

#solar_term

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(western_year:) ⇒ Average

初期化

Parameters:

  • western_year (Integer)

    西暦年



30
31
32
33
# File 'lib/zakuro/version/senmyou/stella/solar/average.rb', line 30

def initialize(western_year:)
  solar_term = self.class.first_solar_term(western_year: western_year)
  super(solar_term: solar_term)
end

Class Method Details

.calc_first_solar_term_index(western_year:) ⇒ Integer

計算開始する二十四節気番号を求める

  • 前提として入定気は冬至の手前にある

  • 例えば、定気が大雪であれば入定気は大雪の範囲内にある

  • 入定気は、定気の開始位置に重複しない限り、常に定気より後にある

  • 基本的に定気の一つ前から起算すれば、当時から求めた11月(閏10/閏11月)に二十四節気を割り当てられる

Parameters:

  • western_year (Integer)

    西暦年

Returns:

  • (Integer)

    二十四節気番号



83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/zakuro/version/senmyou/stella/solar/average.rb', line 83

def calc_first_solar_term_index(western_year:)
  # 天正閏余
  lunar_age = Origin::LunarAge.get(western_year: western_year)

  solar_location = Solar::Location.new(lunar_age: lunar_age)
  solar_location.run

  solar_term_index = solar_location.index

  # 入定気の一つ後の二十四節気まで戻す(ただし11月経朔が二十四節気上にある場合は戻さない)
  solar_term_index += 1 unless solar_location.remainder.day.zero?

  solar_term_index
end

.first_solar_term(western_year:) ⇒ SolarTerm

計算開始する二十四節気を求める

Parameters:

  • western_year (Integer)

    西暦年

Returns:

  • (SolarTerm)

    二十四節気



54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/zakuro/version/senmyou/stella/solar/average.rb', line 54

def first_solar_term(western_year:)
  # 天正冬至
  winter_solstice = Origin::WinterSolstice.get(western_year: western_year)

  # 二十四節気(冬至)
  solar_term = Cycle::SolarTerm.new(index: 0, remainder: winter_solstice)

  first_solar_term_index = calc_first_solar_term_index(western_year: western_year)

  # 対象の二十四節気まで戻す
  solar_term.prev_by_index(first_solar_term_index)

  solar_term
end

Instance Method Details

#set(annual_range:) ⇒ Array<Month>

冬至から数えた1年データの月ごとに二十四節気を割り当てる

Parameters:

  • annual_range (Array<Month>)

    1年データ

Returns:

  • (Array<Month>)

    1年データ



42
43
44
# File 'lib/zakuro/version/senmyou/stella/solar/average.rb', line 42

def set(annual_range:)
  super(annual_range: annual_range)
end