module Zakuro::Gihou::Lunar::Adjustment

Adjustment 補正値情報

Constants

DAY_LIMIT

遠/近の地点での中間

7、14、21日の小余の境界は下記のようにして求めた

* 宣明暦の7日の小余は7465である。入暦は1始まりなので、0始まりで表現すると 6-7465 となる
* 6 * 8400(統法) + 7465(初益) = 57865
* これを儀鳳暦に変えると、 57865 / 1340(総法) = 6 余り 1190.845238..
* これを入暦の1始まりに置き換え、少数部を消すと 7-1190、これが7日目となる
* 同様の方法で14日と21日も求める
* 57865 * 2 = 115730 / 1340(総法) = 13 余り 1041.690476 = 14-1041
* 57865 * 3 = 173595 / 1340(総法) = 20 余り 892.5357143 = 21-892

28日は変日の範囲内743とした。

* 宣明暦では 進退 14-6529(1始まりなので実質13) * 2 = 27-4658
* 暦周 27-4658.19 に一致する。これを変日27-743.1と同等とみなした

@return [Hash<Integer>] 遠/近の地点での中間

LIST

@note 7日、14日、21日、28日の小余は DAY_LIMIT を参照のこと

@return [Array<Row>] 月の補正値情報

Public Class Methods

minus_minute(day:, minute:) click to toggle source

小余の下げ幅を求める

@param [Integer] day 大余 @param [Integer] minute 小余

@return [Integer] 小余の下げ幅

# File lib/zakuro/version/gihou/stella/lunar/adjustment.rb, line 238
def self.minus_minute(day:, minute:)
  limit = DAY_LIMIT.fetch(day, -1)
  # 該当なし
  return minute if limit == -1

  return minute unless minute > limit

  minute - limit
end
specify(day:, minute:) click to toggle source

月軌道の補正に必要な基本値を引き当てる

@param [True, False] forward 進(遠地点より数える)/退(近地点より数える) @param [Integer] day 大余 @param [Integer] minute 小余

@return [Row] 補正値

# File lib/zakuro/version/gihou/stella/lunar/adjustment.rb, line 219
def self.specify(day:, minute:)
  LIST.each do |row|
    # NOTE: 範囲が重複している場合、最初に引き当てたほうを優先する
    return row if row.match?(day: day, minute: minute)
  end

  raise ArgumentError.new, "invalid parameter: #{day}/#{minute}"
end