Module: Zakuro::Version::Gihou::Lunar::Adjustment
- Defined in:
- lib/zakuro/version/gihou/stella/lunar/adjustment.rb
Overview
Adjustment 補正値情報
Defined Under Namespace
Constant Summary collapse
- 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と同等とみなした
{ 7 => 1191, # 天平勝宝2年(750年)5月 により 1190 ではないことを確認した 14 => 1042, # 養老6年(722年) 6月 により 1041 ではないことを確認した 21 => 892, 28 => 743.06 # 天平13年(741年) 2月 により 743 ではないことを確認した }.freeze
- LIST =
Note:
7日、14日、21日、28日の小余は DAY_LIMIT を参照のこと
Returns 月の補正値情報.
[ Row.new(day: 1, range: Range.new, value: Value.new(per: -134, stack: 0)), Row.new(day: 2, range: Range.new, value: Value.new(per: -117, stack: -134)), Row.new(day: 3, range: Range.new, value: Value.new(per: -99, stack: -251)), Row.new(day: 4, range: Range.new, value: Value.new(per: -78, stack: -350)), Row.new(day: 5, range: Range.new, value: Value.new(per: -56, stack: -428)), Row.new(day: 6, range: Range.new, value: Value.new(per: -33, stack: -484)), Row.new(day: 7, range: Range.new(max: DAY_LIMIT[7]), value: Value.new(per: -9, stack: -517)), Row.new(day: 7, range: Range.new(min: DAY_LIMIT[7]), value: Value.new(per: 0, stack: -526)), Row.new(day: 8, range: Range.new, value: Value.new(per: +14, stack: -526)), Row.new(day: 9, range: Range.new, value: Value.new(per: +38, stack: -512)), Row.new(day: 10, range: Range.new, value: Value.new(per: +62, stack: -474)), Row.new(day: 11, range: Range.new, value: Value.new(per: +85, stack: -412)), Row.new(day: 12, range: Range.new, value: Value.new(per: +104, stack: -327)), Row.new(day: 13, range: Range.new, value: Value.new(per: +121, stack: -223)), Row.new(day: 14, range: Range.new(max: DAY_LIMIT[14]), value: Value.new(per: +102, stack: -102)), Row.new(day: 14, range: Range.new(min: DAY_LIMIT[14]), value: Value.new(per: +29, stack: 0)), Row.new(day: 15, range: Range.new, value: Value.new(per: +128, stack: +29)), Row.new(day: 16, range: Range.new, value: Value.new(per: +115, stack: +157)), Row.new(day: 17, range: Range.new, value: Value.new(per: +95, stack: +272)), Row.new(day: 18, range: Range.new, value: Value.new(per: +74, stack: +367)), Row.new(day: 19, range: Range.new, value: Value.new(per: +52, stack: +441)), Row.new(day: 20, range: Range.new, value: Value.new(per: +28, stack: +493)), Row.new(day: 21, range: Range.new(max: DAY_LIMIT[21]), value: Value.new(per: +4, stack: +521)), Row.new(day: 21, range: Range.new(min: DAY_LIMIT[21]), value: Value.new(per: 0, stack: +525)), Row.new(day: 22, range: Range.new, value: Value.new(per: -20, stack: +525)), Row.new(day: 23, range: Range.new, value: Value.new(per: -44, stack: +505)), Row.new(day: 24, range: Range.new, value: Value.new(per: -68, stack: +461)), Row.new(day: 25, range: Range.new, value: Value.new(per: -89, stack: +393)), Row.new(day: 26, range: Range.new, value: Value.new(per: -108, stack: +304)), Row.new(day: 27, range: Range.new, value: Value.new(per: -125, stack: +196)), Row.new(day: 28, range: Range.new(max: DAY_LIMIT[28]), value: Value.new(per: -71, stack: +71)) ].freeze
Class Method Summary collapse
-
.minus_minute(day:, minute:) ⇒ Integer
小余の下げ幅を求める.
-
.specify(day:, minute:) ⇒ Row
月軌道の補正に必要な基本値を引き当てる.
Class Method Details
.minus_minute(day:, minute:) ⇒ Integer
小余の下げ幅を求める
244 245 246 247 248 249 250 251 252 |
# File 'lib/zakuro/version/gihou/stella/lunar/adjustment.rb', line 244 def 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:) ⇒ Row
月軌道の補正に必要な基本値を引き当てる
225 226 227 228 229 230 231 232 |
# File 'lib/zakuro/version/gihou/stella/lunar/adjustment.rb', line 225 def 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 |