Module: AstroChart::Pure::Moon

Defined in:
lib/astro_chart/pure/moon.rb,
lib/astro_chart/pure/moon_elp.rb

Overview

Moon — MIT-safe 純 Ruby 月球位置(零外部依賴)。

只使用公開文獻公式,不參考 Swiss Ephemeris C 原始碼:

  • 月球黃經/黃緯/距離:Jean Meeus, "Astronomical Algorithms" 2nd ed., Ch. 47(ELP-2000/82 截斷級數:Table 47.A 60 項 + Table 47.B 60 項), 再以公開發表的 ELP-2000/82B 級數(Chapront-Touzé & Chapront 1983/1988, CDS VizieR VI/79)補充(moon_elp.rb):
    • 主問題:Meeus 截斷線以下黃經 +197 項(至 0.005")、 黃緯 +221 項(至 0.002")
    • 攝動:地球扁率(ELP4/5/8)+ 行星攝動 Table 1/2(ELP10/11/16/17), 取代 Meeus 的 A1/A2/A3 加法捷徑(那些正是這些級數檔的最大列) 補充後截斷誤差 < 0.1"(黃經)/ < 0.05"(黃緯)。 實測 vs JPL Horizons(1972-11 近地點朔望,最惡條件):黃經差 0.12"。
  • 視位置 = 幾何位置 + 章動 Δψ(Meeus Ch. 47 慣例;月亮距地近、 光行差以「地心速度」定義對月球不適用,光行時 ~1.3s → ~0.0002°, 在精度預算內忽略)。
  • 真(密切)北交點:由月球黃道直角座標 r 與中央差分速度 v 取 角動量 h = r × v,升交點方向 n = ẑ × h = (−h_y, h_x, 0), Ω = atan2(n_y, n_x) = atan2(h_x, −h_y)(標準軌道力學,如 Vallado "Fundamentals of Astrodynamics";黃道座標系)。 與平均交點可差達 ±1.75°,不可混用。

精度註記(2026-07 驗證):TRUE_NODE vs Swiss Ephemeris 全域(1900-2026 每 2 天 dense 掃描)max ≈ 0.018°、mean ≈ 0.0026°。殘差尖峰集中在 「近地點 + 朔望」時刻(誤差被 1/i ≈ 11 倍放大的敏感點),且已用 JPL Horizons 狀態向量獨立仲裁:本實作的密切交點與 Horizons 差 ~0.0006°,SE(內建 Moshier 類 fallback 星曆,月黃經實測差 Horizons 1.75")差 ~0.018° — 即殘差主要是 SE 側的近似誤差,繼續加項無法 收斂(往 SE 誤差擬合反而踩授權線),此為此法的自然底線。

時間尺度慣例:公開 API 一律吃 **JD(UT)**,內部經 Core.jd_tt 換算 TT 後代入級數(月亮 ~13°/day,ΔT ≈ 70s 就是 ~0.01°,不可省)。

公開 API(module_function,皆回傳 Float 度 [0,360)): Moon.apparent_longitude(jd_ut) -> 月球視黃經(幾何 + Δψ) Moon.true_node(jd_ut) -> 真北交點視黃經(密切 Ω + Δψ) Moon.geometric_position(jd_tt) -> [λ_deg, β_deg, Δ_km](幾何,平春分點)

Constant Summary collapse

NODE_DIFF_STEP_DAYS =

中央差分步長(日)。0.005d ≈ 7.2 分鐘:對 27.3 天週期的軌道, 二階截斷誤差 ~(2π·0.005/27.3)² ~ 1e-6,遠小於交點 0.02° 目標。

0.005
LON_DIST_TERMS =

--- Meeus Table 47.A:黃經 Σl(單位 1e-6 度)與距離 Σr(單位 1e-3 km) --- 各列 [D, M, M', F, l_coeff, r_coeff];含 M 的項需乘 E^|M|(E 見 47.6)。

[
  [0,  0,  1,  0,  6_288_774, -20_905_355],
  [2,  0, -1,  0,  1_274_027,  -3_699_111],
  [2,  0,  0,  0,    658_314,  -2_955_968],
  [0,  0,  2,  0,    213_618,    -569_925],
  [0,  1,  0,  0,   -185_116,      48_888],
  [0,  0,  0,  2,   -114_332,      -3_149],
  [2,  0, -2,  0,     58_793,     246_158],
  [2, -1, -1,  0,     57_066,    -152_138],
  [2,  0,  1,  0,     53_322,    -170_733],
  [2, -1,  0,  0,     45_758,    -204_586],
  [0,  1, -1,  0,    -40_923,    -129_620],
  [1,  0,  0,  0,    -34_720,     108_743],
  [0,  1,  1,  0,    -30_383,     104_755],
  [2,  0,  0, -2,     15_327,      10_321],
  [0,  0,  1,  2,    -12_528,           0],
  [0,  0,  1, -2,     10_980,      79_661],
  [4,  0, -1,  0,     10_675,     -34_782],
  [0,  0,  3,  0,     10_034,     -23_210],
  [4,  0, -2,  0,      8_548,     -21_636],
  [2,  1, -1,  0,     -7_888,      24_208],
  [2,  1,  0,  0,     -6_766,      30_824],
  [1,  0, -1,  0,     -5_163,      -8_379],
  [1,  1,  0,  0,      4_987,     -16_675],
  [2, -1,  1,  0,      4_036,     -12_831],
  [2,  0,  2,  0,      3_994,     -10_445],
  [4,  0,  0,  0,      3_861,     -11_650],
  [2,  0, -3,  0,      3_665,      14_403],
  [0,  1, -2,  0,     -2_689,      -7_003],
  [2,  0, -1,  2,     -2_602,           0],
  [2, -1, -2,  0,      2_390,      10_056],
  [1,  0,  1,  0,     -2_348,       6_322],
  [2, -2,  0,  0,      2_236,      -9_884],
  [0,  1,  2,  0,     -2_120,       5_751],
  [0,  2,  0,  0,     -2_069,           0],
  [2, -2, -1,  0,      2_048,      -4_950],
  [2,  0,  1, -2,     -1_773,       4_130],
  [2,  0,  0,  2,     -1_595,           0],
  [4, -1, -1,  0,      1_215,      -3_958],
  [0,  0,  2,  2,     -1_110,           0],
  [3,  0, -1,  0,       -892,       3_258],
  [2,  1,  1,  0,       -810,       2_616],
  [4, -1, -2,  0,        759,      -1_897],
  [0,  2, -1,  0,       -713,      -2_117],
  [2,  2, -1,  0,       -700,       2_354],
  [2,  1, -2,  0,        691,           0],
  [2, -1,  0, -2,        596,           0],
  [4,  0,  1,  0,        549,      -1_423],
  [0,  0,  4,  0,        537,      -1_117],
  [4, -1,  0,  0,        520,      -1_571],
  [1,  0, -2,  0,       -487,      -1_739],
  [2,  1,  0, -2,       -399,           0],
  [0,  0,  2, -2,       -381,      -4_421],
  [1,  1,  1,  0,        351,           0],
  [3,  0, -2,  0,       -340,           0],
  [4,  0, -3,  0,        330,           0],
  [2, -1,  2,  0,        327,           0],
  [0,  2,  1,  0,       -323,       1_165],
  [1,  1, -1,  0,        299,           0],
  [2,  0,  3,  0,        294,           0],
  [2,  0, -1, -2,          0,       8_752]
].freeze
LAT_TERMS =

--- Meeus Table 47.B:黃緯 Σb(單位 1e-6 度) --- 各列 [D, M, M', F, b_coeff];含 M 的項需乘 E^|M|。

[
  [0,  0,  0,  1,  5_128_122],
  [0,  0,  1,  1,    280_602],
  [0,  0,  1, -1,    277_693],
  [2,  0,  0, -1,    173_237],
  [2,  0, -1,  1,     55_413],
  [2,  0, -1, -1,     46_271],
  [2,  0,  0,  1,     32_573],
  [0,  0,  2,  1,     17_198],
  [2,  0,  1, -1,      9_266],
  [0,  0,  2, -1,      8_822],
  [2, -1,  0, -1,      8_216],
  [2,  0, -2, -1,      4_324],
  [2,  0,  1,  1,      4_200],
  [2,  1,  0, -1,     -3_359],
  [2, -1, -1,  1,      2_463],
  [2, -1,  0,  1,      2_211],
  [2, -1, -1, -1,      2_065],
  [0,  1, -1, -1,     -1_870],
  [4,  0, -1, -1,      1_828],
  [0,  1,  0,  1,     -1_794],
  [0,  0,  0,  3,     -1_749],
  [0,  1, -1,  1,     -1_565],
  [1,  0,  0,  1,     -1_491],
  [0,  1,  1,  1,     -1_475],
  [0,  1,  1, -1,     -1_410],
  [0,  1,  0, -1,     -1_344],
  [1,  0,  0, -1,     -1_335],
  [0,  0,  3,  1,      1_107],
  [4,  0,  0, -1,      1_021],
  [4,  0, -1,  1,        833],
  [0,  0,  1, -3,        777],
  [4,  0, -2,  1,        671],
  [2,  0,  0, -3,        607],
  [2,  0,  2, -1,        596],
  [2, -1,  1, -1,        491],
  [2,  0, -2,  1,       -451],
  [0,  0,  3, -1,        439],
  [2,  0,  2,  1,        422],
  [2,  0, -3, -1,        421],
  [2,  1, -1,  1,       -366],
  [2,  1,  0,  1,       -351],
  [4,  0,  0,  1,        331],
  [2, -1,  1,  1,        315],
  [2, -2,  0, -1,        302],
  [0,  0,  1,  3,       -283],
  [2,  1,  1, -1,       -229],
  [1,  1,  0, -1,        223],
  [1,  1,  0,  1,        223],
  [0,  1, -2, -1,       -220],
  [2,  1, -1, -1,       -220],
  [1,  0,  1,  1,       -185],
  [2, -1, -2, -1,        181],
  [0,  1,  2,  1,       -177],
  [4,  0, -2, -1,        176],
  [4, -1, -1, -1,        166],
  [1,  0,  1, -1,       -164],
  [4,  0,  1, -1,        132],
  [1,  0, -1, -1,       -119],
  [4, -1,  0, -1,        115],
  [2, -2,  0,  1,        107]
].freeze
PLANETARY_ARGS =

ELP-2000/82B 級數補充表 — MIT-safe(機器產生,勿手改)。

資料來源:Chapront-Touzé & Chapront, "The lunar ephemeris ELP 2000" (A&A 124, 50, 1983) 與 "ELP 2000-85" (A&A 190, 342, 1988),級數檔 公開於 CDS VizieR VI/79(公開發表的天文數據;檔案格式依 BDL 公開 參考程式 elp82b.f 的 format 1001/1002/1003)。未參考任何 Swiss Ephemeris 原始碼。

動機:真交點由 h = r × v 取向,黃緯誤差被 1/i(≈0.0898 rad) ≈ 11 倍 放大 — Meeus 47.B 截斷底(~4")正是交點 ~0.02° 殘差的來源。 本補充把主問題黃緯截到 0.002"、黃經 0.005",並以完整攝動級數 (地球扁率 + 行星攝動 Table 1/2)取代 Meeus 的 A1/A2/A3 加法捷徑。

單位/慣例:

  • coeff 一律 1e-6 度(同 Meeus 表);phase 為度。
  • SUPP_*:主問題補充項 [D, M, M', F, coeff],Meeus 截斷線以下、 已剔除 47.A/47.B 既有組合;沿用 Meeus 慣例乘 E^|M|(|M| ≤ 4)。
  • PERT_*_ZETA:[iz, iD, iM, iMp, iF, phase, coeff, tpow], arg = phase + iz·ζ + …(ζ = W1 + p·t ≡ Meeus 的 of-date L'); tpow=1 為 Poisson 項(振幅 × T)。來源 ELP4/5/8。
  • PERT_*_PLAN1:[Me,V,T,Ma,J,S,U,N, iD, iMp, iF, phase, coeff], 8 個行星平黃經 + D, M', F(無 M)。來源 ELP10/11。
  • PERT_*_PLAN2:[Me,V,T,Ma,J,S,U, iD, iM, iMp, iF, phase, coeff], 7 個行星平黃經 + D, M, M', F。來源 ELP16/17。
  • 攝動項不乘 E 因子(依 ELP 慣例振幅為常數)。
  • 行星 /t Poisson 檔(ELP13-15/19-21)刻意不收:其中純 Delaunay 頻率的項與 Meeus E 因子慣例重複(會雙重計入 e' 長期變化), 其餘獨立內容 < 0.5" 在精度預算內。潮汐/月球扁率/相對論/ 太陽離心率 t² 檔全部 < 0.005",一併略過。

行星平黃經(J2000 慣性系、線性)[base_deg, rate_deg_per_cy]:

[
    [252.2509055167, 149472.6746358278], # Mercury
    [181.9798008472, 58517.8156759861], # Venus
    [100.4664501639, 35999.3728543889], # Earth
    [355.4332746278, 19140.2993313444], # Mars
    [34.3514839222, 3034.9056746139], # Jupiter
    [50.0774713722, 1222.1137942556], # Saturn
    [314.0550051139, 428.4669983139], # Uranus
    [304.3486654861, 218.4862002056], # Neptune
].freeze
SUPP_LON_TERMS =

主問題補充(ELP1:197 項 ≥ 0.005";ELP2:221 項 ≥ 0.002")

[
    [  2,  0,   1,   2,       -275.1],
    [  2,  0,  -4,   0,        263.4],
    [  2, -2,   1,   0,        208.8],
    [  0,  1,  -3,   0,       -185.9],
    [  4,  1,  -1,   0,       -176.5],
    [  1,  0,   2,   0,       -162.2],
    [  1,  0,   0,  -2,       -162.0],
    [  6,  0,  -2,   0,        158.8],
    [  2,  0,  -2,  -2,       -155.7],
    [  1, -1,   0,   0,       -154.7],
    [  0,  1,   3,   0,       -151.6],
    [  2,  0,  -2,   2,       -148.8],
    [  2, -1,  -3,   0,        132.9],
    [  2,  0,   2,  -2,       -126.1],
    [  2, -1,  -1,   2,       -118.4],
    [  0,  0,   0,   4,        116.8],
    [  0,  1,   0,   2,        114.8],
    [  3,  0,   0,   0,        112.3],
    [  6,  0,  -1,   0,        109.6],
    [  2, -1,   0,   2,       -106.2],
    [  2, -1,   1,  -2,       -104.0],
    [  4,  1,  -2,   0,        -99.3],
    [  1,  1,  -2,   0,         97.1],
    [  2, -3,   0,   0,         94.4],
    [  0,  0,   3,   2,        -91.3],
    [  4, -2,  -1,   0,         85.8],
    [  0,  1,  -1,  -2,         83.8],
    [  4,  0,  -1,  -2,         83.6],
    [  2, -2,  -2,   0,         81.7],
    [  6,  0,  -3,   0,         81.3],
    [  2,  1,   2,   0,        -80.6],
    [  4,  1,   0,   0,        -80.3],
    [  4, -1,   1,   0,         78.5],
    [  3,  1,  -1,   0,         76.0],
    [  0,  1,   1,   2,         73.2],
    [  1,  0,   0,   2,         70.6],
    [  3,  0,   0,  -2,        -70.3],
    [  2,  2,  -2,   0,        -69.4],
    [  2, -3,  -1,   0,         68.6],
    [  3, -1,  -1,   0,        -64.3],
    [  4,  0,   2,   0,         60.7],
    [  4,  0,  -1,   2,        -55.9],
    [  0,  2,  -2,   0,        -53.6],
    [  2,  2,   0,   0,        -51.6],
    [  2,  0,  -1,  -2,         49.7],
    [  2,  1,  -3,   0,         49.0],
    [  4,  0,  -2,   2,        -47.2],
    [  4, -2,  -2,   0,         43.8],
    [  4, -2,   0,   0,         42.3],
    [  3,  1,   0,   0,         41.6],
    [  1, -1,  -1,   0,        -37.9],
    [  1,  0,  -3,   0,        -35.6],
    [  6,  0,   0,   0,         35.0],
    [  2,  0,   2,   2,        -34.4],
    [  1, -1,   1,   0,        -33.5],
    [  0,  0,   5,   0,         30.8],
    [  0,  3,   0,   0,        -28.2],
    [  4, -1,  -3,   0,         27.7],
    [  2, -1,   3,   0,         25.9],
    [  1,  1,   2,   0,         25.6],
    [  2,  0,  -3,  -2,        -25.4],
    [  0,  0,   1,   4,         25.3],
    [  6, -1,  -2,   0,         25.1],
    [  4,  0,   0,   2,        -23.6],
    [  2,  1,   1,  -2,         23.5],
    [  3, -1,  -2,   0,        -23.1],
    [  0,  1,   1,  -2,        -23.0],
    [  0,  1,  -1,   2,        -22.4],
    [  0,  0,   1,  -4,        -22.3],
    [  2,  0,   4,   0,         21.6],
    [  2,  0,   0,  -4,        -20.9],
    [  0,  1,   0,  -2,         20.8],
    [  2, -1,   1,   2,        -20.5],
    [  6, -1,  -1,   0,         19.8],
    [  2,  0,  -5,   0,         19.0],
    [  2,  1,  -1,   2,         18.7],
    [  4,  0,   1,  -2,        -18.3],
    [  2,  1,   0,   2,         18.2],
    [  3, -1,   0,   0,         18.1],
    [  0,  2,   2,   0,        -18.1],
    [  2, -2,   2,   0,         17.9],
    [  2, -2,   0,  -2,         17.5],
    [  2, -1,  -1,  -2,        -17.0],
    [  5,  0,  -2,   0,        -15.9],
    [  0,  0,   3,  -2,        -15.8],
    [  0,  1,  -2,  -2,         14.3],
    [  0,  3,  -1,   0,        -14.3],
    [  4,  1,   1,   0,        -14.1],
    [  0,  1,  -4,   0,        -13.1],
    [  1,  0,   1,   2,         12.4],
    [  3,  0,  -3,   0,        -12.3],
    [  0,  1,   2,   2,         12.1],
    [  1, -2,   0,   0,         12.0],
    [  3,  1,  -2,   0,        -11.6],
    [  1,  0,   3,   0,        -11.3],
    [  1,  0,   1,  -2,        -11.1],
    [  0,  1,   4,   0,        -11.0],
    [  1,  2,   0,   0,        -11.0],
    [  6, -1,  -3,   0,         10.8],
    [  1,  1,   0,   2,        -10.0],
    [  4,  2,  -2,   0,         -9.8],
    [  2,  0,   3,  -2,         -9.3],
    [  2, -3,   1,   0,          9.2],
    [  4, -1,   2,   0,          9.1],
    [  3,  0,  -1,  -2,         -8.3],
    [  2, -1,  -4,   0,          8.2],
    [  2, -1,   2,  -2,         -8.0],
    [  2, -1,  -2,  -2,         -7.8],
    [  4,  1,  -3,   0,          7.5],
    [  0,  1,   2,  -2,          7.4],
    [  2,  1,   3,   0,         -7.4],
    [  0,  0,   4,   2,         -7.2],
    [  6, -1,   0,   0,          7.0],
    [  0,  1,  -2,   2,          6.7],
    [  4, -2,   1,   0,          6.7],
    [  4,  0,   0,  -2,         -6.6],
    [  1,  0,  -1,  -2,         -6.6],
    [  2,  2,   0,  -2,         -6.5],
    [  1,  1,  -3,   0,          6.4],
    [  4, -1,  -1,  -2,          6.4],
    [  4, -1,  -1,   2,         -6.3],
    [  6,  0,   1,   0,          6.3],
    [  3,  1,   1,   0,          6.2],
    [  4,  0,   3,   0,          6.0],
    [  2, -1,  -2,   2,         -6.0],
    [  4,  2,  -1,   0,         -6.0],
    [  2,  0,  -1,   4,          5.5],
    [  3, -1,   0,  -2,         -5.4],
    [  4,  1,  -1,  -2,         -5.2],
    [  2,  1,  -4,   0,          5.1],
    [  0,  3,   1,   0,         -5.0],
    [  2, -2,   0,   2,         -5.0],
    [  4,  0,   1,   2,         -4.9],
    [  4, -3,  -1,   0,          4.8],
    [  5,  0,  -3,   0,         -4.7],
    [  2, -2,   1,  -2,         -4.6],
    [  2,  1,   1,   2,          4.5],
    [  1,  0,  -1,   2,          4.4],
    [  2, -2,  -1,   2,         -4.3],
    [  4, -1,  -2,   2,         -4.3],
    [  2, -2,  -3,   0,          4.3],
    [  0,  2,  -3,   0,         -4.2],
    [  1, -1,   2,   0,         -4.1],
    [  2,  0,   0,   4,          3.8],
    [  6,  0,  -4,   0,          3.8],
    [  5,  0,  -1,   0,         -3.8],
    [  2, -4,   0,   0,          3.7],
    [  2,  2,   1,   0,         -3.7],
    [  2,  0,   3,   2,         -3.7],
    [  0,  0,   2,   4,          3.6],
    [  1, -1,   0,  -2,         -3.6],
    [  6,  1,  -2,   0,         -3.6],
    [  3,  0,  -1,   2,          3.4],
    [  3, -2,  -1,   0,         -3.3],
    [  4, -1,   0,   2,         -3.1],
    [  6,  1,  -1,   0,         -3.0],
    [  2,  0,  -4,  -2,         -3.0],
    [  3,  0,   1,  -2,         -2.9],
    [  2, -1,   2,   2,         -2.8],
    [  2, -3,  -2,   0,          2.7],
    [  1,  0,  -4,   0,         -2.7],
    [  4,  0,   2,  -2,         -2.7],
    [  4, -3,   0,   0,          2.7],
    [  4,  0,  -3,   2,         -2.6],
    [  2,  2,  -3,   0,         -2.6],
    [  3,  1,   0,  -2,          2.5],
    [  2,  1,   2,  -2,          2.5],
    [  8,  0,  -2,   0,          2.4],
    [  2,  0,  -1,  -4,         -2.4],
    [  1,  2,   1,   0,         -2.4],
    [  8,  0,  -3,   0,          2.3],
    [  6, -2,  -2,   0,          2.3],
    [  2, -4,  -1,   0,          2.3],
    [  4, -3,  -2,   0,          2.1],
    [  6, -2,  -1,   0,          2.1],
    [  4, -1,   1,  -2,         -2.0],
    [  2, -1,   4,   0,          2.0],
    [  5, -1,  -2,   0,         -1.9],
    [  1,  1,   3,   0,          1.9],
    [  1, -1,  -2,   0,         -1.9],
    [  4,  1,   2,   0,         -1.9],
    [  4, -1,   0,  -2,          1.9],
    [  1,  1,   1,   2,         -1.8],
    [  2,  2,  -1,  -2,         -1.8],
    [  4,  0,  -2,  -2,          1.8],
    [  0,  0,   6,   0,          1.8],
    [  0,  1,  -3,  -2,          1.7],
    [  3,  1,  -3,   0,         -1.7],
    [  4, -2,  -3,   0,          1.6],
    [  2,  0,   5,   0,          1.6],
    [  0,  1,   3,   2,          1.5],
    [  2, -2,   3,   0,          1.5],
    [  1,  0,   2,   2,          1.5],
    [  3, -2,   0,   0,          1.4],
    [  0,  2,   0,   2,          1.4],
    [  6,  0,  -2,   2,         -1.4],
    [  2,  2,  -1,   2,          1.4]
].freeze
SUPP_LAT_TERMS =
[
    [  3,  0,   0,  -1,        -97.7],
    [  4, -1,  -1,   1,         94.1],
    [  2,  0,  -1,  -3,         91.4],
    [  2, -2,  -1,   1,         87.4],
    [  0,  1,   2,  -1,        -86.9],
    [  3,  0,  -1,  -1,        -84.8],
    [  0,  1,  -2,   1,        -83.7],
    [  2,  0,   1,  -3,        -80.9],
    [  2, -2,  -1,  -1,         74.6],
    [  0,  0,   4,   1,         73.1],
    [  2,  0,  -3,   1,         70.6],
    [  2,  0,  -1,   3,        -68.0],
    [  2,  1,   1,   1,        -65.8],
    [  4, -1,  -2,   1,         59.4],
    [  4,  0,   1,   1,         59.1],
    [  3,  0,  -1,   1,        -57.2],
    [  4,  1,  -1,  -1,        -47.8],
    [  4, -1,   0,   1,         43.9],
    [  2,  0,   3,  -1,         40.7],
    [  2,  0,   0,   3,        -40.1],
    [  1,  0,  -1,   1,         38.7],
    [  2,  0,   3,   1,         38.3],
    [  2,  2,   0,  -1,        -37.3],
    [  2,  0,  -4,  -1,         37.2],
    [  0,  0,   2,  -3,        -36.2],
    [  2, -1,   2,  -1,         35.8],
    [  2, -1,   2,   1,         34.4],
    [  0,  0,   2,   3,        -32.7],
    [  0,  2,  -1,  -1,        -31.5],
    [  2,  2,  -1,   1,        -31.5],
    [  4,  1,   0,  -1,        -31.4],
    [  1,  0,  -2,  -1,        -30.5],
    [  2,  2,  -1,  -1,        -29.3],
    [  1,  1,   1,   1,         28.3],
    [  0,  2,  -1,   1,        -26.4],
    [  6,  0,  -1,  -1,         26.1],
    [  0,  0,   4,  -1,         25.4],
    [  2, -1,   0,  -3,         24.5],
    [  6,  0,  -2,  -1,         22.5],
    [  2,  1,  -2,  -1,         22.0],
    [  1,  0,  -2,   1,        -21.8],
    [  0,  1,  -3,  -1,        -20.8],
    [  2, -2,   1,  -1,         19.2],
    [  2,  0,  -2,   3,        -18.2],
    [  1,  0,   2,   1,        -17.7],
    [  2,  1,   2,  -1,        -17.5],
    [  4,  0,   0,  -3,         17.4],
    [  0,  1,   3,   1,        -17.2],
    [  0,  2,   1,  -1,        -17.2],
    [  2, -1,  -2,   1,        -17.2],
    [  6,  0,  -2,   1,         16.6],
    [  2, -2,   1,   1,         16.2],
    [  0,  2,   0,   1,        -15.9],
    [  4, -1,   1,  -1,         15.8],
    [  1,  1,  -1,   1,        -15.5],
    [  0,  2,   1,   1,        -15.3],
    [  2, -1,  -3,  -1,         15.3],
    [  2,  1,   0,  -3,        -15.2],
    [  2,  1,  -2,   1,         15.1],
    [  4, -1,  -2,  -1,         14.6],
    [  4,  1,  -1,   1,        -14.2],
    [  3,  0,  -2,   1,        -13.5],
    [  4,  0,   2,  -1,         13.4],
    [  6,  0,  -1,   1,         11.7],
    [  3,  0,  -2,  -1,        -10.9],
    [  6,  0,   0,  -1,         10.2],
    [  2, -3,   0,  -1,         10.1],
    [  1,  0,   2,  -1,        -10.1],
    [  3,  0,   1,  -1,        -10.0],
    [  4, -2,  -1,  -1,          9.6],
    [  1,  1,   1,  -1,          9.6],
    [  3,  1,   0,  -1,          9.5],
    [  1,  0,   0,  -3,         -9.0],
    [  6,  0,  -3,   1,          8.7],
    [  2,  1,   2,   1,         -8.7],
    [  4, -1,   1,   1,          8.4],
    [  2,  0,   1,   3,         -8.4],
    [  4,  1,  -2,   1,         -8.2],
    [  4, -2,   0,  -1,          8.1],
    [  3,  0,   0,   1,         -7.9],
    [  4,  0,   2,   1,          7.9],
    [  3, -1,   0,  -1,         -7.1],
    [  4,  1,   0,   1,         -7.1],
    [  2,  0,  -4,   1,          6.9],
    [  0,  1,   3,  -1,         -6.7],
    [  4, -2,  -1,   1,          6.6],
    [  0,  1,  -3,   1,         -6.6],
    [  2, -2,  -2,  -1,          6.3],
    [  4,  0,  -3,   1,          6.0],
    [  3,  1,  -1,   1,          5.8],
    [  3, -1,  -1,  -1,         -5.8],
    [  2,  0,  -2,  -3,          5.7],
    [  1, -1,   1,  -1,         -5.6],
    [  2,  1,  -3,  -1,          5.1],
    [  1, -1,   0,   1,         -5.1],
    [  0,  2,   0,  -1,         -5.0],
    [  0,  0,   5,   1,          4.9],
    [  4,  1,   1,  -1,         -4.7],
    [  1,  1,  -2,   1,          4.7],
    [  2, -1,   1,  -3,         -4.6],
    [  2, -3,   0,   1,          4.5],
    [  1,  1,  -2,  -1,          4.4],
    [  0,  2,  -2,  -1,         -4.4],
    [  6,  0,   0,   1,          4.1],
    [  2,  2,   0,   1,         -4.1],
    [  6, -1,  -1,  -1,          4.1],
    [  3, -1,  -1,   1,         -3.8],
    [  3,  1,   0,   1,          3.8],
    [  1, -1,   0,  -1,         -3.7],
    [  3,  1,  -1,  -1,          3.7],
    [  2,  2,  -2,  -1,         -3.5],
    [  4, -2,   0,   1,          3.5],
    [  1,  0,  -3,  -1,         -3.5],
    [  4, -2,  -2,   1,          3.4],
    [  2, -1,   3,   1,          3.4],
    [  2, -1,  -1,   3,         -3.3],
    [  2,  0,   4,   1,          3.3],
    [  0,  0,   3,   3,         -3.3],
    [  0,  1,   0,   3,          3.2],
    [  2,  0,  -5,  -1,          3.1],
    [  6, -1,  -2,  -1,          3.0],
    [  2, -3,  -1,   1,          2.9],
    [  1, -1,  -1,  -1,          2.9],
    [  2, -1,  -1,  -3,          2.9],
    [  2,  0,   4,  -1,          2.9],
    [  5,  0,  -1,  -1,         -2.9],
    [  2,  0,   2,  -3,         -2.8],
    [  1,  1,   2,   1,          2.8],
    [  3,  0,   0,  -3,         -2.8],
    [  2, -1,   3,  -1,          2.7],
    [  6, -1,  -2,   1,          2.6],
    [  2, -1,   0,   3,         -2.6],
    [  2, -1,  -3,   1,          2.6],
    [  0,  1,  -1,   3,         -2.5],
    [  2, -3,  -1,  -1,          2.5],
    [  1, -1,   1,   1,         -2.3],
    [  4,  0,  -3,  -1,         -2.1],
    [  6, -1,  -1,   1,          2.1],
    [  0,  1,   1,  -3,         -2.0],
    [  6,  0,  -3,  -1,          2.0],
    [  0,  1,   1,   3,          1.9],
    [  2, -2,   2,   1,          1.9],
    [  4,  0,  -4,  -1,         -1.9],
    [  0,  1,  -1,  -3,          1.9],
    [  1,  1,  -1,  -1,          1.8],
    [  3,  0,   1,   1,         -1.8],
    [  1,  0,   0,   3,          1.8],
    [  4,  0,  -1,   3,         -1.8],
    [  0,  1,  -4,  -1,         -1.8],
    [  6, -1,   0,  -1,          1.8],
    [  4,  0,  -2,   3,         -1.8],
    [  6,  0,   1,  -1,          1.8],
    [  2,  2,   1,  -1,         -1.7],
    [  4, -1,   2,  -1,          1.7],
    [  0,  0,   0,   5,          1.6],
    [  0,  0,   5,  -1,          1.6],
    [  4,  1,   1,   1,         -1.6],
    [  0,  1,   4,   1,         -1.5],
    [  1,  0,  -3,   1,         -1.5],
    [  4, -1,   0,  -3,          1.5],
    [  4,  0,  -1,  -3,         -1.5],
    [  4,  0,   1,  -3,         -1.5],
    [  0,  2,   2,   1,         -1.5],
    [  0,  2,  -2,   1,         -1.5],
    [  2, -2,   2,  -1,          1.5],
    [  1,  0,   3,   1,         -1.5],
    [  2,  1,   3,  -1,         -1.4],
    [  2,  2,  -2,   1,         -1.4],
    [  5,  0,  -2,   1,         -1.4],
    [  5,  0,  -2,  -1,         -1.4],
    [  2,  0,   2,   3,         -1.3],
    [  2,  1,   1,  -3,          1.3],
    [  4,  0,   3,  -1,          1.2],
    [  3,  1,   1,  -1,          1.2],
    [  4,  2,  -1,  -1,         -1.2],
    [  2, -1,  -4,  -1,          1.2],
    [  6, -1,  -3,   1,          1.2],
    [  4, -2,   1,  -1,          1.2],
    [  4, -1,   2,   1,          1.2],
    [  4,  0,  -2,  -3,         -1.1],
    [  6,  1,  -1,  -1,         -1.0],
    [  1,  0,  -1,  -3,         -1.0],
    [  2,  1,  -1,  -3,         -1.0],
    [  2,  1,   3,   1,         -1.0],
    [  3, -1,  -2,   1,         -0.9],
    [  1,  1,   2,  -1,          0.9],
    [  4,  0,   3,   1,          0.9],
    [  3,  0,   2,  -1,         -0.9],
    [  4,  2,  -2,   1,         -0.8],
    [  3,  0,  -3,  -1,         -0.8],
    [  3, -1,   1,  -1,         -0.8],
    [  4,  0,   0,   3,         -0.8],
    [  0,  2,   2,  -1,         -0.8],
    [  3, -1,  -2,  -1,         -0.8],
    [  4,  1,   0,  -3,         -0.8],
    [  2, -2,   0,  -3,          0.8],
    [  4, -2,  -2,  -1,          0.8],
    [  6, -1,   0,   1,          0.8],
    [  6,  0,   1,   1,          0.8],
    [  2,  1,  -4,  -1,          0.7],
    [  1,  0,  -1,   3,          0.7],
    [  1,  0,   3,  -1,         -0.7],
    [  0,  0,   1,  -5,         -0.7],
    [  5,  0,  -1,   1,         -0.7],
    [  2, -3,   1,  -1,          0.7],
    [  3,  1,   1,   1,          0.7],
    [  2, -3,   1,   1,          0.7],
    [  3,  1,  -2,   1,         -0.7],
    [  6,  1,  -2,  -1,         -0.7],
    [  2, -1,  -2,   3,         -0.7],
    [  4, -2,   1,   1,          0.7],
    [  5,  0,   0,  -1,         -0.7],
    [  2,  0,  -3,   3,          0.6],
    [  0,  3,  -1,  -1,         -0.6],
    [  1, -2,   0,  -1,          0.6],
    [  1, -2,   0,   1,          0.6],
    [  1,  2,   0,   1,         -0.6],
    [  2, -1,   1,   3,         -0.6],
    [  2,  0,   0,  -5,         -0.6],
    [  2,  0,  -5,   1,          0.6],
    [  4,  1,  -2,  -1,         -0.6]
].freeze
PERT_LON_ZETA =

地球扁率攝動(ELP4 ≥ 0.01":17 項;ELP5 ≥ 0.003" + ELP8×T:30 項)

[
    [ 1,   0,  0,   0,  -1,    0.00094,      1962.0, 0],
    [ 1,   0,  0,   1,  -1,    0.00127,       137.0, 0],
    [ 1,   0,  0,  -1,  -1,    0.00127,       136.5, 0],
    [ 1,   0,  0,   0,   1,    0.00071,       100.2, 0],
    [ 1,   2,  0,   0,  -1,    0.00090,        26.8, 0],
    [ 1,  -2,  0,   0,  -1,    0.00100,        18.2, 0],
    [ 1,   2,  0,  -1,  -1,    0.00042,        17.9, 0],
    [ 1,   0,  0,  -1,   1,    0.00051,        14.0, 0],
    [ 1,  -2,  0,   1,  -1,    0.00029,        13.8, 0],
    [ 1,  -2,  0,   0,   1,    0.00076,        13.2, 0],
    [ 1,   0,  0,   1,   1,    0.00070,        10.7, 0],
    [ 2,   0,  0,   0,  -2,  180.00000,        10.1, 0],
    [ 1,   0,  0,   2,  -1,    0.00126,         9.5, 0],
    [ 1,   0,  0,  -2,  -1,    0.00128,         9.1, 0],
    [ 0,   2,  0,  -1,   0,    0.00000,         6.1, 0],
    [ 1,   0,  0,   0,  -3,  180.00086,         4.1, 0],
    [ 1,   2,  0,   1,  -1,    0.00102,         3.4, 0]
].freeze
PERT_LAT_ZETA =
[
    [ 1,   0,  0,   0,   0,  180.00071,      2234.7, 0],
    [ 1,   0,  0,  -1,   0,    0.00075,       126.6, 0],
    [ 1,   0,  0,   1,   0,  180.00069,       115.5, 0],
    [ 1,   0,  0,   0,  -2,    0.00086,        90.6, 0],
    [ 1,  -2,  0,   0,   0,    0.00072,        82.9, 0],
    [ 1,   2,  0,  -1,   0,  180.00073,        23.2, 0],
    [ 2,   0,  0,   0,  -1,    0.00000,        22.3, 0],
    [ 1,  -2,  0,   1,   0,    0.00071,        20.4, 0],
    [ 1,   2,  0,   0,   0,  180.00070,        12.9, 0],
    [ 1,   0,  0,  -1,  -2,    0.00109,        11.0, 0],
    [ 1,   0,  0,   2,   0,  180.00066,         6.7, 0],
    [ 1,   0,  0,  -2,   0,    0.00067,         4.8, 0],
    [ 1,  -2,  0,  -1,   0,    0.00075,         4.6, 0],
    [ 1,  -2,  1,   0,   0,    0.00072,         3.9, 0],
    [ 1,   2,  0,   0,  -2,    0.00102,         2.8, 0],
    [ 1,   0,  0,   0,   2,    0.00071,         2.3, 0],
    [ 1,  -2,  0,   2,   0,    0.00066,         1.9, 0],
    [ 1,  -2, -1,   0,   0,  180.00071,         1.6, 0],
    [ 1,   2,  0,   1,   0,  180.00067,         1.6, 0],
    [ 1,  -2,  0,   1,  -2,    0.00065,         1.6, 0],
    [ 1,  -2,  0,   0,  -2,    0.00093,         1.6, 0],
    [ 2,   0,  0,   1,  -1,    0.00000,         1.2, 0],
    [ 1,   0,  0,  -1,   2,    0.00062,         1.2, 0],
    [ 2,   0,  0,  -1,  -1,  180.00000,         1.2, 0],
    [ 1,   2, -1,  -1,   0,  180.00073,         1.0, 0],
    [ 1,   0,  0,  -2,  -2,    0.00116,         1.0, 0],
    [ 1,  -4,  0,   1,   0,    0.00071,         0.9, 0],
    [ 1,  -2,  1,   1,   0,    0.00071,         0.9, 0],
    [ 1,   2, -1,   0,   0,  180.00070,         0.9, 0],
    [ 1,   0,  0,   0,   0,    0.00000,         1.0, 1]
].freeze
PERT_LON_PLAN1 =

行星攝動 Table 1(ELP10 ≥ 0.01":224 項;ELP11 ≥ 0.003":151 項)

[
    [  0,  18, -16,  0,  0,  0,  0,  0,   0,  -1,   0,   26.54261,     3958.0],
    [  0,   0,   2,  0, -2,  0,  0,  0,   2,  -1,   0,  180.11977,      317.5],
    [  0,   0,   4, -8,  3,  0,  0,  0,   0,   0,   0,  285.98707,      250.3],
    [  0,   1,  -1,  0,  0,  0,  0,  0,   0,   0,   0,  180.00988,      228.2],
    [  0,  18, -16,  0,  0,  0,  0,  0,   0,  -2,   0,   26.54324,      218.9],
    [  0,  18, -16,  0,  0,  0,  0,  0,   0,   0,   0,   26.54560,      205.4],
    [  0,   3,  -3,  0,  0,  0,  0,  0,   2,  -1,   0,  179.98144,      178.8],
    [  0,   0,   1,  0, -1,  0,  0,  0,   0,   0,   0,    1.22890,      177.4],
    [  0,  10,  -3,  0,  0,  0,  0,  0,   0,  -1,   0,  333.30551,      156.5],
    [  0,   0,   2,  0, -3,  0,  0,  0,   2,  -1,   0,   10.07001,      123.7],
    [  0,   2,  -3,  0,  0,  0,  0,  0,   0,   0,   0,  269.95393,       95.4],
    [  0,   0,   1, -2,  0,  0,  0,  0,   0,   0,   0,  318.13776,       90.2],
    [  0,   2,  -2,  0,  0,  0,  0,  0,   0,   0,   0,    0.20448,       83.8],
    [  0,   0,   2,  0, -3,  0,  0,  0,   2,  -2,   0,   10.03835,       78.6],
    [  0,   0,   2,  0, -2,  0,  0,  0,   2,  -2,   0,    0.08642,       68.1],
    [  0,   8, -13,  0,  0,  0,  0,  0,   0,   0,   0,  235.75013,       62.9],
    [  0,   0,   1,  0, -1,  0,  0,  0,  -2,   1,   0,    1.74333,       58.7],
    [  0,   0,   2, -2,  0,  0,  0,  0,   0,   0,   0,  359.76487,       54.0],
    [  0,   0,   2,  0, -2,  0,  0,  0,   0,   0,   0,  180.43608,       51.3],
    [  0,   0,   2,  0, -2,  0,  0,  0,   0,  -1,   0,  359.98450,       50.7],
    [  0,   3,  -4,  0,  0,  0,  0,  0,   0,   0,   0,  270.99316,       48.6],
    [  0,   0,   4, -8,  3,  0,  0,  0,   0,  -1,   0,  284.98776,       47.5],
    [  0,   0,   4, -8,  3,  0,  0,  0,   0,   1,   0,  284.98767,       47.4],
    [  0,  18, -16,  0,  0,  0,  0,  0,  -2,   0,   0,   26.53985,       46.4],
    [  0,   0,   1,  0, -1,  0,  0,  0,  -2,   0,   0,    1.80280,       45.8],
    [  0,  18, -16,  0,  0,  0,  0,  0,  -2,  -1,   0,   26.54223,       45.7],
    [  0,   0,   1,  0, -2,  0,  0,  0,   0,   0,   0,  301.00599,       45.6],
    [  0,   0,   0,  0,  2, -5,  0,  0,   0,   0,   0,  347.76653,       45.5],
    [  0,  18, -16,  0,  0,  0,  0,  0,   2,  -1,   0,   26.54301,       45.3],
    [  0,   2,  -2,  0,  0,  0,  0,  0,  -2,   1,   0,    0.31177,       44.7],
    [  0,  18, -16,  0,  0,  0,  0,  0,   2,  -2,   0,   26.54227,       43.6],
    [  0,   1,  -1,  0,  0,  0,  0,  0,   0,  -1,   0,  180.00888,       42.6],
    [  0,   0,   1,  0, -1,  0,  0,  0,   0,  -1,   0,    1.23582,       39.9],
    [  0,   0,   4, -8,  3,  0,  0,  0,   2,  -1,   0,  287.11388,       38.8],
    [  0,   0,   4, -8,  3,  0,  0,  0,  -2,   1,   0,  287.11216,       38.8],
    [  0,   2,  -2,  0,  0,  0,  0,  0,   2,  -1,   0,  359.99762,       37.8],
    [  0,   2,  -2,  0,  0,  0,  0,  0,  -2,   0,   0,    0.36659,       37.3],
    [  0,   1,  -1,  0,  0,  0,  0,  0,  -2,   1,   0,  179.98436,       36.5],
    [  0,   1,  -1,  0,  0,  0,  0,  0,   0,   1,   0,  180.01511,       35.3],
    [  0,   3,  -3,  0,  0,  0,  0,  0,   0,  -1,   0,    0.12046,       34.8],
    [  0,   0,   1,  0, -1,  0,  0,  0,   0,   1,   0,    1.11168,       30.5],
    [  0,  20, -21,  0,  0,  0,  0,  0,  -2,   1,   0,  271.80227,       29.6],
    [  0,  26, -29,  0,  0,  0,  0,  0,   0,  -1,   0,   75.00074,       29.1],
    [  0,   3,  -4,  0,  0,  0,  0,  0,   1,  -1,   0,  270.34292,       28.9],
    [  0,   1,  -1,  0,  0,  0,  0,  0,  -2,   0,   0,  179.98152,       27.6],
    [  0,   0,   2,  0, -3,  0,  0,  0,   0,  -1,   0,  190.17970,       26.4],
    [  0,   0,   2, -4,  0,  0,  0,  0,   0,   0,   0,  300.13913,       25.5],
    [  0,   0,   4, -8,  3,  0,  0,  0,  -2,   0,   0,  286.68957,       25.0],
    [  0,   0,   4, -8,  3,  0,  0,  0,   2,   0,   0,  286.69269,       25.0],
    [  0,   0,   2,  0, -2,  0,  0,  0,  -2,   1,   0,  180.86110,       24.8],
    [  0,   0,   0,  0,  1,  0,  0,  0,   0,   0,   0,  286.69628,       24.0],
    [  0,   0,   2,  0, -2,  0,  0,  0,  -2,   0,   0,  180.95918,       23.4],
    [  0,   3,  -5,  0,  0,  0,  0,  0,   0,   0,   0,  344.52995,       23.0],
    [  0,   4,  -4,  0,  0,  0,  0,  0,   2,  -1,   0,  180.00979,       22.9],
    [  0,   6,  -8,  0,  0,  0,  0,  0,   2,  -1,   0,  167.22262,       21.3],
    [  0,   3,  -3,  0,  0,  0,  0,  0,   2,  -2,   0,    0.04167,       20.0],
    [  0,   0,   2,  0, -2,  0,  0,  0,   2,   0,   0,  180.13179,       19.1],
    [  0,   0,   0,  0,  2, -5,  0,  0,   0,   1,   0,  346.48972,       19.0],
    [  0,   0,   0,  0,  2, -5,  0,  0,   0,  -1,   0,  346.48704,       19.0],
    [  0,   0,   1,  0, -1,  0,  0,  0,   1,   0,   0,  180.70913,       18.6],
    [  0,   3,  -4,  0,  0,  0,  0,  0,   1,   0,   0,  270.28604,       18.1],
    [  0,   0,   1, -2,  0,  0,  0,  0,   0,   1,   0,  313.47920,       17.8],
    [  0,   0,   0,  2,  0,  0,  0,  0,   1,   0,  -1,  163.72199,       17.7],
    [  0,   0,   1, -2,  0,  0,  0,  0,   0,  -1,   0,  313.30347,       17.6],
    [  0,   2,  -3,  0,  0,  0,  0,  0,  -2,   1,   0,  271.56625,       17.2],
    [  0,   2,  -3,  0,  0,  0,  0,  0,   0,  -1,   0,  268.69648,       16.8],
    [  0,   6,  -8,  0,  0,  0,  0,  0,   2,  -2,   0,  167.12686,       16.5],
    [  0,   0,   2, -2,  0,  0,  0,  0,  -2,   1,   0,  358.86873,       16.4],
    [  0,   0,   0,  0,  1,  0,  0,  0,  -2,   1,   0,  359.80946,       16.0],
    [  0,   2,  -2,  0,  0,  0,  0,  0,   0,  -1,   0,    0.39852,       15.7],
    [  0,   2,  -3,  0,  0,  0,  0,  0,   0,   1,   0,  268.56875,       15.4],
    [  0,  18, -16,  0,  0,  0,  0,  0,   0,  -3,   0,   26.54324,       14.9],
    [  0,   0,   0,  0,  1,  0,  0,  0,   2,  -1,   0,  356.13718,       14.7],
    [  0,   5,  -6,  0,  0,  0,  0,  0,   2,   0,  -2,  272.29577,       14.6],
    [  0,   0,   2,  0, -3,  0,  0,  0,   0,   0,   0,  190.43600,       14.4],
    [  0,   0,   1,  0, -1,  0,  0,  0,   2,  -1,   0,    0.57920,       14.2],
    [  0,   2,  -2,  0,  0,  0,  0,  0,   0,   1,   0,    0.15681,       14.1],
    [  0,  18, -16,  0,  0,  0,  0,  0,   0,   1,   0,   26.54560,       14.0],
    [  0,   0,   3, -4,  0,  0,  0,  0,   0,   0,   0,  330.08714,       13.0],
    [  0,   3,  -4,  0,  0,  0,  0,  0,  -2,   1,   0,  270.60642,       13.0],
    [  0,   4,  -4,  0,  0,  0,  0,  0,   0,   0,   0,  180.07081,       12.9],
    [  0,   0,   2, -2,  0,  0,  0,  0,  -2,   0,   0,  358.57975,       12.8],
    [  0,   0,   1,  0, -2,  0,  0,  0,  -2,   1,   0,  305.99416,       12.7],
    [  0,   1,  -2,  0,  0,  0,  0,  0,   0,   0,   0,  103.71567,       12.4],
    [  0,   3,  -3,  0,  0,  0,  0,  0,   0,   0,   0,  179.09975,       12.1],
    [  0,   0,   5, -6,  0,  0,  0,  0,   2,  -1,   0,  151.73240,       11.9],
    [  0,  20, -20,  0,  0,  0,  0,  0,  -1,   1,  -1,  194.02829,       11.9],
    [  0,   2,  -3,  0,  0,  0,  0,  0,  -2,   0,   0,  271.38094,       11.7],
    [  0,   0,   2, -2,  0,  0,  0,  0,   0,  -1,   0,  359.51637,       11.7],
    [  0,   0,   0,  0,  1,  0,  0,  0,   0,  -1,   0,  294.98414,       11.2],
    [  0,   0,   2, -3,  0,  0,  0,  0,   0,   0,   0,  330.28695,       11.2],
    [  0,   0,   0,  0,  1,  0,  0,  0,   0,   1,   0,  293.67110,       11.2],
    [  0,   3,  -4,  0,  0,  0,  0,  0,   0,  -1,   0,  271.17391,       11.0],
    [  0,   0,   1,  0,  0, -1,  0,  0,   0,   0,   0,    0.43296,       10.8],
    [  0,   8, -13,  0,  0,  0,  0,  0,  -2,   1,   0,  238.00817,       10.8],
    [  0,   8, -13,  0,  0,  0,  0,  0,   0,  -1,   0,  233.44625,       10.8],
    [  0,   8, -13,  0,  0,  0,  0,  0,   0,   1,   0,  233.44527,       10.8],
    [  0,   8, -13,  0,  0,  0,  0,  0,   2,  -1,   0,  237.96935,       10.7],
    [  0,   0,   1,  0, -2,  0,  0,  0,   0,  -1,   0,  301.00167,       10.5],
    [  0,   5,  -5,  0,  0,  0,  0,  0,   2,  -1,   0,  180.07299,       10.4],
    [  0,   0,   0,  0,  0,  0,  0,  0,   2,  -1,   0,    0.12204,       10.4],
    [  0,   3,  -4,  0,  0,  0,  0,  0,  -2,   0,   0,  270.55741,       10.2],
    [  0,   2,  -2,  0,  0,  0,  0,  0,   2,   0,   0,  359.98667,        9.9],
    [  0,   0,   1, -2,  0,  0,  0,  0,   2,  -1,   0,  321.96125,        9.9],
    [  0,   0,   1,  0, -2,  0,  0,  0,  -2,   0,   0,  306.02804,        9.7],
    [  0,  12,  -8,  0,  0,  0,  0,  0,  -2,   1,   0,  228.50839,        9.7],
    [  0,   2,  -3,  0,  0,  0,  0,  0,   2,  -1,   0,  271.01820,        9.6],
    [  0,   0,   2,  0, -2,  0,  0,  0,   0,   1,   0,  180.40927,        9.3],
    [  0,   0,   0,  0,  1,  0,  0,  0,  -2,   0,   0,  355.13454,        9.2],
    [  0,   5,  -5,  0,  0,  0,  0,  0,   0,   0,   0,  180.02851,        9.2],
    [  0,   0,   6, -8,  0,  0,  0,  0,   2,  -1,   0,  302.34346,        9.2],
    [  0,   0,   2, -2,  0,  0,  0,  0,   0,   1,   0,    0.07117,        9.1],
    [  0,  21, -21,  0,  0,  0,  0,  0,   0,  -1,   0,  179.94393,        9.0],
    [  0,   3,  -7,  4,  0,  0,  0,  0,   0,   0,   0,  148.23103,        9.0],
    [  0,   0,   1, -2,  0,  0,  0,  0,  -2,   1,   0,  320.91988,        8.9],
    [  0,   0,   2,  0, -3,  0,  0,  0,   2,   0,   0,   10.08580,        8.8],
    [  0,   0,   1,  0, -1,  0,  0,  0,   2,   0,   0,    0.43396,        8.6],
    [  0,  10,  -3,  0,  0,  0,  0,  0,   0,  -2,   0,  333.10628,        8.6],
    [  0,  10,  -3,  0,  0,  0,  0,  0,   0,   0,   0,  333.03408,        8.6],
    [  0,   3,  -3,  0,  0,  0,  0,  0,   2,   0,   0,  179.94277,        8.4],
    [  0,   4,  -5,  0,  0,  0,  0,  0,   2,  -1,   0,   91.39917,        8.2],
    [  3,   0,  -1,  0,  0,  0,  0,  0,  -2,   1,   0,   96.56536,        8.1],
    [  0,   3,  -4,  0,  0,  0,  0,  0,   0,   1,   0,  271.08666,        8.1],
    [  0,   0,   1,  0, -2,  0,  0,  0,   0,   1,   0,  301.49768,        8.0],
    [  0,   0,   0,  0,  1,  0,  0,  0,   2,   0,   0,  346.26872,        7.9],
    [  0,  18, -16,  0,  0,  0,  0,  0,   0,  -1,   2,  206.54280,        7.8],
    [  0,  18, -16,  0,  0,  0,  0,  0,   0,  -1,  -2,  206.54280,        7.8],
    [  0,   0,   8, -15,  0,  0,  0,  0,   0,   0,   0,  155.30914,        7.3],
    [  0,   4,  -6,  0,  0,  0,  0,  0,   0,   0,   0,  343.21324,        7.2],
    [  0,   0,   1,  0,  1,  0,  0,  0,   1,   0,  -1,   75.47182,        7.1],
    [  0,  15, -13,  0,  0,  0,  0,  0,  -2,   1,   0,   26.32315,        7.0],
    [  0,   0,   1, -2,  0,  0,  0,  0,   2,   0,   0,  320.19758,        7.0],
    [  0,   8, -13,  0,  0,  0,  0,  0,  -2,   0,   0,  237.41676,        6.7],
    [  0,   8, -13,  0,  0,  0,  0,  0,   2,   0,   0,  237.22280,        6.6],
    [  0,   0,   1,  0, -1,  0,  0,  0,   1,  -1,   0,    0.69736,        6.5],
    [  0,   0,   1, -2,  0,  0,  0,  0,  -2,   0,   0,  318.22943,        6.4],
    [  0,   0,   1,  0, -3,  0,  0,  0,   0,   0,   0,  304.60699,        6.4],
    [  0,   5,  -8,  0,  0,  0,  0,  0,   0,   0,   0,   70.23554,        6.4],
    [  0,   3,  -5,  0,  0,  0,  0,  0,   2,  -1,   0,  346.95020,        6.4],
    [  0,   5,  -6,  0,  0,  0,  0,  0,   2,  -1,   0,  271.88133,        6.3],
    [  0,   6,  -6,  0,  0,  0,  0,  0,   0,   0,   0,  180.02165,        6.3],
    [  0,   1,  -1,  0,  0,  0,  0,  0,   2,   0,   0,  180.01464,        6.1],
    [  0,   2,  -3,  0,  0,  0,  0,  0,   2,   0,   0,  269.98647,        6.0],
    [  0,   0,   3,  0, -3,  0,  0,  0,   2,  -1,   0,  173.71802,        6.0],
    [  0,   6,  -6,  0,  0,  0,  0,  0,   2,  -1,   0,  180.04574,        5.9],
    [  0,  18, -16,  0,  0,  0,  0,  0,  -2,  -2,   0,   26.54274,        5.6],
    [  0,   0,   6, -8,  0,  0,  0,  0,   2,  -2,   0,  302.35646,        5.6],
    [  0,   0,   4, -4,  0,  0,  0,  0,   2,  -1,   0,  181.91276,        5.6],
    [  0,   0,   3, -5,  0,  0,  0,  0,   0,   0,   0,  300.80387,        5.6],
    [  0,  18, -16,  0,  0,  0,  0,  0,   2,   0,   0,   26.54486,        5.4],
    [  0,   3,  -5,  0,  0,  0,  0,  0,  -2,   1,   0,  345.88283,        5.3],
    [  0,   0,   0,  0,  0,  1,  0,  0,   0,   0,   0,  260.21409,        5.3],
    [  0,   0,   2,  0,  0, -2,  0,  0,   2,  -1,   0,  180.03353,        5.2],
    [  0,   0,   2,  0, -3,  0,  0,  0,  -2,   0,   0,  190.20751,        5.1],
    [  0,   0,   1,  0, -2,  0,  0,  0,   2,  -1,   0,  301.71105,        5.1],
    [  0,   0,   3, -7,  0,  0,  0,  0,  -1,   2,  -1,  144.43917,        5.0],
    [  0,   5,  -7,  0,  0,  0,  0,  0,   1,   0,  -1,  169.26762,        5.0],
    [  0,   0,   2,  0, -3,  0,  0,  0,  -2,   1,   0,  190.29786,        5.0],
    [  0,   0,   2, -4,  0,  0,  0,  0,   0,   1,   0,  298.04083,        4.9],
    [  0,   0,   2, -4,  0,  0,  0,  0,   0,  -1,   0,  297.82534,        4.8],
    [  0,   0,   8, -16,  4,  5,  0,  0,   2,  -1,   0,  252.68044,        4.7],
    [  0,   0,   5, -6,  0,  0,  0,  0,   2,  -2,   0,  331.68291,        4.7],
    [  0,   0,   8, -16,  4,  5,  0,  0,  -2,   1,   0,  252.68044,        4.7],
    [  0,   0,   1,  0,  2, -5,  0,  0,   0,   0,   0,   65.64939,        4.7],
    [  0,   0,   1,  0,  0,  0,  0,  0,   0,   0,   0,   95.38394,        4.7],
    [  0,   0,   3, -6,  0,  0,  0,  0,   0,   0,   0,  271.34254,        4.6],
    [  0,   0,   2,  0, -1,  0,  0,  0,  -2,   0,   0,  264.37885,        4.6],
    [  0,   0,   2,  0, -1,  0,  0,  0,   0,   0,   0,  270.16044,        4.4],
    [  0,   0,   0,  0,  0,  0,  0,  0,   2,   0,   0,    0.09994,        4.4],
    [  0,   7,  -7,  0,  0,  0,  0,  0,   0,   0,   0,  179.98587,        4.3],
    [  0,   0,   2,  0, -1,  0,  0,  0,  -2,   1,   0,  264.83212,        4.3],
    [  0,   3,  -5,  0,  0,  0,  0,  0,   0,   1,   0,  338.66373,        4.2],
    [  0,   3,  -3,  0,  0,  0,  0,  0,  -2,   0,   0,    2.82174,        4.2],
    [  0,  15, -12,  0,  0,  0,  0,  0,  -1,   0,   0,   99.70101,        4.1],
    [  0,   3,  -3,  0,  0,  0,  0,  0,  -2,   1,   0,    2.66594,        4.1],
    [  0,   3,  -5,  0,  0,  0,  0,  0,   0,  -1,   0,  338.06720,        4.0],
    [  0,   0,   2,  0, -2,  0,  0,  0,   0,  -2,   0,  359.98542,        4.0],
    [  0,   3,  -5,  0,  0,  0,  0,  0,   2,   0,   0,  346.49874,        4.0],
    [  0,   6,  -8,  0,  0,  0,  0,  0,   0,  -1,   0,  347.12979,        4.0],
    [  0,   0,   3, -4,  0,  0,  0,  0,  -2,   1,   0,  328.67574,        4.0],
    [  0,   0,   3, -4,  0,  0,  0,  0,   1,  -1,   0,  331.25359,        4.0],
    [  0,   0,   3, -3,  0,  0,  0,  0,   0,   0,   0,  182.64615,        4.0],
    [  0,   0,   1,  0, -1,  0,  0,  0,  -2,  -1,   0,    1.96510,        4.0],
    [  0,   1,   0,  0,  0,  0,  0,  0,   0,   0,   0,   82.23299,        4.0],
    [  0,   0,   0,  0,  2, -5,  0,  0,   2,  -1,   0,  178.60854,        3.9],
    [  0,   0,   0,  0,  2, -5,  0,  0,  -2,   1,   0,  178.71268,        3.9],
    [  0,   0,   4, -6,  0,  0,  0,  0,   0,   0,   0,  301.21730,        3.9],
    [  0,   0,   2, -2,  0,  0,  0,  0,   2,  -1,   0,    0.45156,        3.7],
    [  0,   2,  -1,  0,  0,  0,  0,  0,  -2,   0,   0,  257.09235,        3.7],
    [  0,   0,   2, -4,  0,  0,  0,  0,   2,  -1,   0,  303.41117,        3.6],
    [  0,   7,  -7,  0,  0,  0,  0,  0,   2,  -1,   0,  180.05152,        3.6],
    [  0,   1,  -1,  0,  0,  0,  0,  0,   2,  -1,   0,  179.87973,        3.6],
    [  0,   0,   2,  0, -1,  0,  0,  0,   2,  -1,   0,  307.24896,        3.6],
    [  0,   0,   2,  0, -4,  0,  0,  0,   2,  -1,   0,   19.76044,        3.6],
    [  0,  23, -25,  0,  0,  0,  0,  0,  -1,   0,   0,  168.18245,        3.5],
    [  0,   1,  -1,  0,  0,  0,  0,  0,   1,   0,   0,  180.02010,        3.4],
    [  0,   0,   2,  0, -2,  0,  0,  0,   4,  -2,   0,  180.12877,        3.4],
    [  0,   0,   1,  0,  0, -1,  0,  0,  -2,   1,   0,    0.68492,        3.4],
    [  0,   2,  -1,  0,  0,  0,  0,  0,  -2,   1,   0,  257.14013,        3.3],
    [  0,   3,  -4,  0,  0,  0,  0,  0,  -1,   0,   0,   90.34969,        3.3],
    [  0,   0,   1,  0, -2,  0,  0,  0,   1,   0,  -1,  100.53010,        3.3],
    [  0,   0,   2, -2,  0,  0,  0,  0,   1,   0,   0,  180.27603,        3.3],
    [  0,   0,   4, -8,  3,  0,  0,  0,   0,  -2,   0,  284.98930,        3.2],
    [  0,  18, -15,  0,  0,  0,  0,  0,  -2,  -1,   0,  283.60558,        3.2],
    [  0,  18, -17,  0,  0,  0,  0,  0,   2,  -1,   0,  129.41497,        3.2],
    [  0,   0,   4, -8,  3,  0,  0,  0,   0,   2,   0,  284.98981,        3.2],
    [  0,   0,   3, -4,  0,  0,  0,  0,  -2,   0,   0,  328.29186,        3.1],
    [  0,   2,  -2,  0,  0,  0,  0,  0,  -2,  -1,   0,    0.44680,        3.1],
    [  0,   0,   2,  0, -3,  1,  0,  0,   2,  -2,   0,  181.29764,        3.1],
    [  0,   0,   4, -7,  0,  0,  0,  0,   0,   0,   0,  271.44643,        3.1],
    [  0,   0,   3, -4,  0,  0,  0,  0,   1,   0,   0,  331.23293,        3.1],
    [  0,   0,   3, -8,  3,  0,  0,  0,   0,   0,   0,   29.79747,        3.1],
    [  0,   0,   0,  2,  0,  0,  0,  0,   1,   1,  -1,  163.74984,        3.0],
    [  0,   3,  -5,  0,  0,  0,  0,  0,  -2,   0,   0,  344.00427,        3.0],
    [  0,   0,   1,  0,  0, -2,  0,  0,   0,   0,   0,  285.55600,        3.0],
    [  0,   0,   5, -8,  3,  0,  0,  0,   0,   0,   0,  187.28372,        3.0],
    [  0,   8,  -8,  0,  0,  0,  0,  0,   0,   0,   0,  179.96606,        3.0],
    [  0,   0,   0,  2,  0,  0,  0,  0,   1,  -1,  -1,  163.74686,        3.0],
    [  0,   0,   2, -3,  0,  0,  0,  0,  -2,   1,   0,  330.92395,        3.0],
    [  0,   0,   1, -1,  0,  0,  0,  0,   0,   0,   0,    0.88394,        2.9],
    [  0,   0,   2,  0, -2,  0,  0,  0,   4,  -1,   0,  180.12629,        2.9],
    [  0,  24, -24,  0,  0,  0,  0,  0,   2,  -3,   0,  179.43126,        2.8],
    [  0,   0,   2, -4,  0,  0,  0,  0,  -2,   1,   0,  302.55753,        2.8],
    [  0,   1,  -1,  0,  0,  0,  0,  0,   0,  -2,   0,  180.00907,        2.8]
].freeze
PERT_LAT_PLAN1 =
[
    [  0,  18, -16,  0,  0,  0,  0,  0,   0,  -1,   1,   26.54287,      175.1],
    [  0,  18, -16,  0,  0,  0,  0,  0,   0,  -1,  -1,   26.54272,      175.0],
    [  0,   0,   1,  0,  0,  0,  0,  0,   1,   0,   0,  291.98200,       39.1],
    [  0,  18, -16,  0,  0,  0,  0,  0,   0,  -2,  -1,   26.54302,       19.3],
    [  0,  18, -16,  0,  0,  0,  0,  0,   0,   0,   1,   26.54416,       18.7],
    [  0,   5,  -6,  0,  0,  0,  0,  0,   2,   0,  -1,  272.30597,       18.5],
    [  0,   0,   2,  0, -2,  0,  0,  0,   2,  -1,  -1,  180.11961,       14.5],
    [  0,   0,   2,  0, -2,  0,  0,  0,   2,  -1,   1,  180.12138,       14.1],
    [  0,   0,   1,  0, -2,  0,  0,  0,   1,   0,   0,  100.50752,       13.8],
    [  0,   3,  -3,  0,  0,  0,  0,  0,   2,   0,  -1,    0.05680,       11.7],
    [  0,   0,   0,  2,  0,  0,  0,  0,   1,   0,   0,  163.75018,       10.8],
    [  0,   5,  -7,  0,  0,  0,  0,  0,   1,   0,   0,  169.28198,       10.3],
    [  0,   0,   1,  0,  1,  0,  0,  0,   1,   0,   0,   75.50853,        9.7],
    [  0,   3,  -3,  0,  0,  0,  0,  0,   2,  -1,  -1,  179.98734,        8.6],
    [  0,   0,   1,  0, -1,  0,  0,  0,  -2,   0,   1,    1.77997,        8.5],
    [  0,   3,  -3,  0,  0,  0,  0,  0,   2,  -1,   1,  179.98167,        8.0],
    [  0,   4,  -5,  0,  0,  0,  0,  0,   1,   0,   0,   76.51440,        8.0],
    [  0,   1,   0,  0,  0,  0,  0,  0,   1,   0,   0,  103.33779,        7.6],
    [  0,  10,  -3,  0,  0,  0,  0,  0,   0,  -1,  -1,  333.18883,        6.9],
    [  0,  10,  -3,  0,  0,  0,  0,  0,   0,  -1,   1,  333.23168,        6.9],
    [  0,   4,  -4,  0,  0,  0,  0,  0,   2,   0,  -1,  180.03860,        6.6],
    [  0,   0,   4, -8,  3,  0,  0,  0,   2,   0,  -1,  286.68658,        6.5],
    [  0,   0,   4, -8,  3,  0,  0,  0,  -2,   0,   1,  286.68417,        6.5],
    [  0,   2,  -2,  0,  0,  0,  0,  0,  -2,   0,   1,    0.36009,        6.3],
    [  0,  18, -16,  0,  0,  0,  0,  0,  -2,  -1,   1,   26.54240,        6.1],
    [  0,   0,   2,  0, -2,  0,  0,  0,   2,   0,  -1,    0.03123,        6.1],
    [  0,  18, -16,  0,  0,  0,  0,  0,   2,  -1,  -1,   26.54244,        6.1],
    [  0,   0,   2,  0, -3,  0,  0,  0,   2,  -1,   1,   10.08526,        5.6],
    [  0,   1,  -1,  0,  0,  0,  0,  0,  -2,   0,   1,  179.98525,        5.6],
    [  0,   2,  -2,  0,  0,  0,  0,  0,   2,   0,  -1,    0.00073,        5.5],
    [  0,   0,   2,  0, -3,  0,  0,  0,   2,  -1,  -1,   10.08059,        5.3],
    [  0,   0,   1,  0,  0, -2,  0,  0,   1,   0,   0,  113.92221,        4.6],
    [  0,   2,  -3,  0,  0,  0,  0,  0,   1,   0,   0,  256.57252,        3.9],
    [  0,   0,   1,  0,  2, -5,  0,  0,   1,   0,   0,  239.05935,        3.9],
    [  0,   0,   1,  0, -1,  0,  0,  0,   2,   0,  -1,    0.45426,        3.9],
    [  0,  18, -16,  0,  0,  0,  0,  0,  -2,   0,  -1,   26.54132,        3.9],
    [  0,   2,  -1,  0,  0,  0,  0,  0,   1,   0,   0,  103.29809,        3.8],
    [  0,  18, -16,  0,  0,  0,  0,  0,   2,  -2,   1,   26.54238,        3.8],
    [  0,   0,   1,  0,  0,  1,  0,  0,   1,   0,   0,  154.18809,        3.6],
    [  0,   0,   2,  0, -2,  0,  0,  0,  -2,   0,   1,  180.91996,        3.4],
    [  0,  18, -16,  0,  0,  0,  0,  0,  -2,  -1,  -1,   26.54252,        3.4],
    [  0,  18, -16,  0,  0,  0,  0,  0,   2,  -1,   1,   26.54282,        3.3],
    [  0,   8, -12,  0,  0,  0,  0,  0,   1,   0,   0,  153.47650,        3.1],
    [  0,   3,  -4,  0,  0,  0,  0,  0,   1,   0,   0,  256.31567,        2.8],
    [  0,   2,  -3,  0,  0,  0,  0,  0,  -2,   0,   1,  271.40179,        2.7],
    [  0,   5,  -6,  0,  0,  0,  0,  0,   1,   0,   0,   76.38459,        2.6],
    [  0,   0,   1,  0, -1,  0,  0,  0,  -2,   1,  -1,    1.64413,        2.5],
    [  0,   2,  -2,  0,  0,  0,  0,  0,   1,   0,   0,  185.88810,        2.5],
    [  0,   0,   2, -2,  0,  0,  0,  0,  -2,   0,   1,  358.62815,        2.4],
    [  0,   3,  -2,  0,  0,  0,  0,  0,   1,   0,   0,  103.29245,        2.3],
    [  0,   0,   0,  0,  1,  0,  0,  0,  -2,   0,   1,  354.87377,        2.3],
    [  0,   1,  -1,  0,  0,  0,  0,  0,   0,   0,   1,  179.99325,        2.3],
    [  0,   1,  -1,  0,  0,  0,  0,  0,   2,   0,  -1,  180.01893,        2.3],
    [  0,   0,   4, -8,  3,  0,  0,  0,   0,  -1,  -1,  285.10406,        2.2],
    [  0,   0,   0,  0,  1,  0,  0,  0,   2,   0,  -1,  346.14598,        2.2],
    [  0,   0,   1,  0, -1,  0,  0,  0,  -2,   0,  -1,    1.79585,        2.2],
    [  0,   0,   4, -8,  3,  0,  0,  0,   0,   1,   1,  285.10433,        2.2],
    [  0,   0,   2,  0, -2,  0,  0,  0,   0,  -1,  -1,  359.95929,        2.2],
    [  0,   5,  -5,  0,  0,  0,  0,  0,   2,   0,  -1,  180.06538,        2.2],
    [  0,   0,   1,  0, -1,  0,  0,  0,   1,   0,   0,   96.81286,        2.2],
    [  0,   0,   1,  0,  0,  0,  0,  0,   1,  -1,   0,  111.95783,        2.2],
    [  0,   0,   1,  0,  0,  0,  0,  0,   1,   1,   0,  291.85752,        2.2],
    [  0,   1,  -2,  0,  0,  0,  0,  0,   1,   0,   0,  256.66200,        2.1],
    [  0,   0,   1,  0, -1,  0,  0,  0,  -2,   1,   1,    1.61873,        2.1],
    [  0,   0,   4, -8,  3,  0,  0,  0,   0,   0,  -1,  287.22930,        2.1],
    [  0,   0,   4, -8,  3,  0,  0,  0,   0,   0,   1,  287.22951,        2.1],
    [  0,   1,   0,  0,  0,  0,  0,  0,  -1,   0,   0,  283.33656,        2.1],
    [  0,   0,   4, -8,  3,  0,  0,  0,   0,  -1,   1,  284.85089,        2.0],
    [  0,   1,  -1,  0,  0,  0,  0,  0,   0,   0,  -1,  179.98778,        2.0],
    [  0,   1,  -1,  0,  0,  0,  0,  0,   0,  -1,  -1,  180.00957,        2.0],
    [  0,   0,   4, -8,  3,  0,  0,  0,   0,   1,  -1,  284.85097,        2.0],
    [  0,   3,  -4,  0,  0,  0,  0,  0,  -2,   0,   1,  270.62094,        1.9],
    [  0,   2,  -2,  0,  0,  0,  0,  0,  -2,   1,  -1,    0.29448,        1.9],
    [  0,   0,   2,  0, -3,  0,  0,  0,   2,  -2,  -1,   10.02715,        1.9],
    [  0,   0,   2,  0, -2,  0,  0,  0,   0,  -1,   1,  359.96504,        1.8],
    [  0,   1,  -2,  0,  0,  0,  0,  0,  -1,   0,   0,  256.60919,        1.8],
    [  0,   2,  -3,  0,  0,  0,  0,  0,   2,   0,  -1,  270.03887,        1.8],
    [  0,   2,  -2,  0,  0,  0,  0,  0,  -2,   0,  -1,    0.38835,        1.8],
    [  0,   0,   1,  0, -1,  0,  0,  0,   0,  -1,  -1,    1.26914,        1.8],
    [  0,  18, -16,  0,  0,  0,  0,  0,   0,  -3,  -1,   26.54310,        1.8],
    [  0,   0,   1,  0, -2,  0,  0,  0,  -2,   0,   1,  305.98316,        1.8],
    [  0,   0,   1, -2,  0,  0,  0,  0,   2,   0,  -1,  320.08151,        1.8],
    [  0,   0,   2, -2,  0,  0,  0,  0,   1,   0,   0,   99.41307,        1.7],
    [  0,   8, -13,  0,  0,  0,  0,  0,  -2,   0,   1,  237.28901,        1.7],
    [  0,   0,   4, -8,  3,  0,  0,  0,   2,  -1,   1,  287.11427,        1.7],
    [  0,   1,  -1,  0,  0,  0,  0,  0,   0,  -1,   1,  180.01218,        1.7],
    [  0,   1,  -1,  0,  0,  0,  0,  0,   0,   1,   1,  180.01228,        1.7],
    [  0,  18, -16,  0,  0,  0,  0,  0,   0,   1,   1,   26.54463,        1.7],
    [  0,   0,   1, -2,  0,  0,  0,  0,  -2,   0,   1,  318.17659,        1.7],
    [  0,   0,   2,  0, -2,  0,  0,  0,   2,  -2,   1,    0.09559,        1.7],
    [  0,   2,  -2,  0,  0,  0,  0,  0,   2,  -1,   1,    0.01635,        1.7],
    [  0,   0,   4, -8,  3,  0,  0,  0,  -2,   1,  -1,  287.11261,        1.7],
    [  0,   8, -13,  0,  0,  0,  0,  0,   2,   0,  -1,  237.23099,        1.7],
    [  0,   2,  -2,  0,  0,  0,  0,  0,  -2,   1,   1,    0.26051,        1.6],
    [  0,   4,  -3,  0,  0,  0,  0,  0,   1,   0,   0,  103.32908,        1.6],
    [  0,   0,   2,  0, -2,  0,  0,  0,   2,   0,   1,  180.14886,        1.6],
    [  0,   1,  -1,  0,  0,  0,  0,  0,  -2,   1,  -1,  179.98223,        1.6],
    [  0,   0,   1,  0, -1,  0,  0,  0,   0,   0,   1,    1.30219,        1.6],
    [  0,   1,  -1,  0,  0,  0,  0,  0,   0,   1,  -1,  180.01282,        1.6],
    [  0,   0,   1,  0, -1,  0,  0,  0,   0,   1,   1,    1.09775,        1.5],
    [  0,   0,   1,  0, -1,  0,  0,  0,   0,  -1,   1,    1.39630,        1.5],
    [  0,   3,  -3,  0,  0,  0,  0,  0,   0,  -1,  -1,    0.10566,        1.5],
    [  0,   0,   3,  0, -3,  0,  0,  0,   2,   0,  -1,  180.13318,        1.4],
    [  0,   1,  -1,  0,  0,  0,  0,  0,  -2,   0,  -1,  179.98623,        1.4],
    [  0,   0,   2,  0, -3,  0,  0,  0,   2,  -2,   1,   10.03367,        1.4],
    [  0,   0,   4, -8,  3,  0,  0,  0,  -2,   1,   1,  287.10965,        1.4],
    [  0,   2,  -2,  0,  0,  0,  0,  0,   2,  -1,  -1,    0.02586,        1.4],
    [  0,   2,  -1,  0,  0,  0,  0,  0,  -1,   0,   0,  283.22744,        1.4],
    [  0,   0,   4, -8,  3,  0,  0,  0,   2,  -1,  -1,  287.11109,        1.4],
    [  0,   0,   1,  0, -1,  0,  0,  0,   0,   1,  -1,    1.12110,        1.4],
    [  0,  26, -29,  0,  0,  0,  0,  0,   0,  -1,  -1,   74.99747,        1.3],
    [  0,  26, -29,  0,  0,  0,  0,  0,   0,  -1,   1,   74.99747,        1.3],
    [  0,   0,   4, -8,  3,  0,  0,  0,   2,   0,   1,  286.69867,        1.3],
    [  0,   3,  -3,  0,  0,  0,  0,  0,   0,  -1,   1,    0.13793,        1.3],
    [  0,   0,   1,  0,  0, -1,  0,  0,   1,   0,   0,  170.12314,        1.3],
    [  0,   6,  -7,  0,  0,  0,  0,  0,   1,   0,   0,   76.28667,        1.3],
    [  0,  20, -21,  0,  0,  0,  0,  0,  -2,   1,  -1,  271.81875,        1.3],
    [  0,   0,   4, -8,  3,  0,  0,  0,  -2,   0,  -1,  286.69718,        1.3],
    [  0,  20, -21,  0,  0,  0,  0,  0,  -2,   1,   1,  271.81875,        1.3],
    [  0,   0,   1,  0, -3,  0,  0,  0,   1,   0,   0,  110.92166,        1.3],
    [  0,   1,  -1,  0,  0,  0,  0,  0,  -2,   1,   1,  179.98246,        1.3],
    [  0,   0,   2,  0, -3,  0,  0,  0,   2,   0,  -1,   10.51992,        1.2],
    [  0,   6,  -6,  0,  0,  0,  0,  0,   2,   0,  -1,  180.02696,        1.2],
    [  0,   0,   3, -4,  0,  0,  0,  0,   1,   0,   0,   54.83801,        1.2],
    [  0,   0,   1,  0, -1,  0,  0,  0,   0,   0,  -1,    1.42005,        1.2],
    [  0,   3,  -6,  0,  0,  0,  0,  0,  -1,   0,   0,  239.00808,        1.2],
    [  0,   0,   2,  0, -2,  0,  0,  0,  -2,   1,  -1,  180.80883,        1.1],
    [  0,   5,  -6,  0,  0,  0,  0,  0,   2,   1,  -1,  272.30644,        1.1],
    [  0,   0,   2, -2,  0,  0,  0,  0,   2,   0,  -1,    0.81383,        1.1],
    [  0,   0,   2,  0, -2,  0,  0,  0,  -2,   0,  -1,  181.01420,        1.1],
    [  0,   0,   2,  0, -3,  0,  0,  0,   0,  -1,  -1,  190.17080,        1.1],
    [  0,   5,  -4,  0,  0,  0,  0,  0,   1,   0,   0,  103.32621,        1.1],
    [  0,   4,  -5,  0,  0,  0,  0,  0,  -1,   0,   0,  256.53671,        1.0],
    [  0,   4,  -4,  0,  0,  0,  0,  0,   2,  -1,   1,  180.02913,        1.0],
    [  0,   0,   1,  0, -2,  0,  0,  0,  -1,   0,   0,  100.50673,        1.0],
    [  0,   0,   2,  0, -3,  0,  0,  0,   0,  -1,   1,  190.17837,        1.0],
    [  0,   2,  -3,  0,  0,  0,  0,  0,   0,   0,   1,  271.29933,        1.0],
    [  0,   6,  -8,  0,  0,  0,  0,  0,   2,  -1,   1,  167.24129,        1.0],
    [  0,   3,  -5,  0,  0,  0,  0,  0,   2,   0,  -1,  346.40963,        1.0],
    [  0,   3,  -4,  0,  0,  0,  0,  0,  -1,   0,   0,   76.59330,        1.0],
    [  0,   0,   1,  0, -2,  0,  0,  0,   2,   0,  -1,  305.89091,        0.9],
    [  0,   0,   2,  0, -2,  0,  0,  0,  -2,   1,   1,  180.76225,        0.9],
    [  0,   6,  -8,  0,  0,  0,  0,  0,   2,  -1,  -1,  167.22739,        0.9],
    [  0,   1,  -3,  0,  0,  0,  0,  0,  -1,   0,   0,  165.49094,        0.9],
    [  0,   2,  -3,  0,  0,  0,  0,  0,   0,   0,  -1,  271.41979,        0.9],
    [  0,   0,   0,  0,  0,  0,  0,  0,   2,   0,  -1,    0.14435,        0.9],
    [  0,   3,  -2,  0,  0,  0,  0,  0,  -1,   0,   0,  283.17493,        0.9],
    [  0,   0,   0,  0,  2, -5,  0,  0,   0,  -1,   1,  346.26978,        0.8],
    [  0,   3,  -4,  0,  0,  0,  0,  0,   1,   0,   1,  270.28991,        0.8],
    [  0,   0,   0,  0,  2, -5,  0,  0,   0,   1,  -1,  346.27178,        0.8],
    [  0,   0,   1,  0, -1,  0,  0,  0,   1,   0,  -1,  180.71271,        0.8]
].freeze
PERT_LON_PLAN2 =

行星攝動 Table 2(ELP16 ≥ 0.01":4 項;ELP17 ≥ 0.003":10 項)

[
    [  0,   0,   1,  0,  0,  0,  0,  1,   0,   0,  -1,   95.13523,       80.4],
    [  0,   0,   1,  0,  0,  0,  0,  1,   0,   1,  -1,   95.13453,       17.3],
    [  0,   0,   1,  0,  0,  0,  0,  1,   0,  -1,  -1,   95.13459,       17.2],
    [  0,   0,   1,  0,  0,  0,  0,  1,   0,   0,   1,   95.13225,       17.1]
].freeze
PERT_LAT_PLAN2 =
[
    [  0,   0,   1,  0,  0,  0,  0,  1,   0,   0,   0,  275.13226,      381.9],
    [  0,   0,   1,  0,  0,  0,  0,  1,   0,  -1,   0,   95.13234,       21.5],
    [  0,   0,   1,  0,  0,  0,  0,  1,   0,   1,   0,  275.13217,       20.1],
    [  0,   0,   1,  0,  0,  0,  0, -1,   0,   0,   0,   95.13226,       13.4],
    [  0,   0,   1,  0,  0,  0,  0,  3,   0,  -1,   0,  275.13228,        4.2],
    [  0,   0,   1,  0,  0,  0,  0, -1,   0,   1,   0,   95.13224,        3.4],
    [  0,   0,   1,  0,  0,  0,  0,  1,   0,   0,  -2,   95.13510,        2.5],
    [  0,   0,   1,  0,  0,  0,  0,  3,   0,   0,   0,  275.13220,        2.4],
    [  0,   0,   1,  0,  0,  0,  0,  1,   0,   2,   0,  275.13207,        1.2],
    [  0,   0,   1,  0,  0,  0,  0,  1,   0,  -1,  -2,   95.13467,        0.9]
].freeze

Class Method Summary collapse

Class Method Details

.apparent_longitude(jd_ut) ⇒ Object

--- 月球視黃經(度,[0,360))。引數 **JD(UT)**。 --- 幾何黃經(平春分點 of date)+ 章動 Δψ = 視黃經(真春分點 of date)。



184
185
186
187
188
189
# File 'lib/astro_chart/pure/moon.rb', line 184

def apparent_longitude(jd_ut)
  tt = Core.jd_tt(jd_ut)
  lam, _beta, _delta = geometric_position(tt)
  dpsi_deg, = Core.nutation(tt)
  Core.norm360(lam + dpsi_deg)
end

.geometric_position(jd_tt) ⇒ Object

--- 幾何黃道座標(平春分點 of date)。引數 **JD(TT)**。 --- 回傳 [λ_deg(未正規化前先算後 norm360), β_deg, Δ_km]。 Meeus Ch. 47:λ = L' + Σl/1e6、β = Σb/1e6、Δ = 385000.56 + Σr/1e3。



221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
# File 'lib/astro_chart/pure/moon.rb', line 221

def geometric_position(jd_tt)
  t = (jd_tt - 2_451_545.0) / 36_525.0

  # 基本引數(Meeus 47.1–47.5,度)
  lp = 218.3164477 + 481_267.88123421 * t - 0.0015786 * t * t +
       t**3 / 538_841.0 - t**4 / 65_194_000.0
  d  = 297.8501921 + 445_267.1114034 * t - 0.0018819 * t * t +
       t**3 / 545_868.0 - t**4 / 113_065_000.0
  m  = 357.5291092 + 35_999.0502909 * t - 0.0001536 * t * t +
       t**3 / 24_490_000.0
  mp = 134.9633964 + 477_198.8675055 * t + 0.0087414 * t * t +
       t**3 / 69_699.0 - t**4 / 14_712_000.0
  f  = 93.2720950 + 483_202.0175233 * t - 0.0036539 * t * t -
       t**3 / 3_526_000.0 + t**4 / 863_310_000.0

  # 離心率修正 E(Meeus 47.6)
  e  = 1.0 - 0.002516 * t - 0.0000074 * t * t
  e2 = e * e

  d_rad  = d * Core::DEG2RAD
  m_rad  = m * Core::DEG2RAD
  mp_rad = mp * Core::DEG2RAD
  f_rad  = f * Core::DEG2RAD

  sum_l = 0.0
  sum_r = 0.0
  LON_DIST_TERMS.each do |cd, cm, cmp, cf, lc, rc|
    arg = cd * d_rad + cm * m_rad + cmp * mp_rad + cf * f_rad
    ecc = cm.zero? ? 1.0 : (cm.abs == 1 ? e : e2)
    sum_l += lc * ecc * Math.sin(arg)
    sum_r += rc * ecc * Math.cos(arg)
  end

  sum_b = 0.0
  LAT_TERMS.each do |cd, cm, cmp, cf, bc|
    arg = cd * d_rad + cm * m_rad + cmp * mp_rad + cf * f_rad
    ecc = cm.zero? ? 1.0 : (cm.abs == 1 ? e : e2)
    sum_b += bc * ecc * Math.sin(arg)
  end

  # ELP-2000/82 主問題補充項(moon_elp.rb;Meeus 截斷線以下)。
  # E 因子沿用 Meeus 慣例推廣為 E^|M|(補充項 |M| 最大 4)。
  SUPP_LON_TERMS.each do |cd, cm, cmp, cf, lc|
    arg = cd * d_rad + cm * m_rad + cmp * mp_rad + cf * f_rad
    ecc = cm.zero? ? 1.0 : e**cm.abs
    sum_l += lc * ecc * Math.sin(arg)
  end
  SUPP_LAT_TERMS.each do |cd, cm, cmp, cf, bc|
    arg = cd * d_rad + cm * m_rad + cmp * mp_rad + cf * f_rad
    ecc = cm.zero? ? 1.0 : e**cm.abs
    sum_b += bc * ecc * Math.sin(arg)
  end

  # 攝動項(moon_elp.rb:地球扁率 ELP4/5/8 + 行星攝動 ELP10/11/16/17)。
  # 取代 Meeus 的 A1/A2/A3 加法捷徑 — 那些捷徑正是這些級數檔的最大列
  # (A1 = 18V−16T−M'、A2/A3 同理),改用完整級數避免雙重計入。
  # ζ = W1 + p·t ≡ Meeus of-date L'(lp);攝動振幅不乘 E 因子。
  sum_l += pert_sum(t, lp, d, m, mp, f,
                    PERT_LON_ZETA, PERT_LON_PLAN1, PERT_LON_PLAN2)
  sum_b += pert_sum(t, lp, d, m, mp, f,
                    PERT_LAT_ZETA, PERT_LAT_PLAN1, PERT_LAT_PLAN2)

  lam   = Core.norm360(lp + sum_l * 1.0e-6)
  beta  = sum_b * 1.0e-6
  delta = 385_000.56 + sum_r * 1.0e-3
  [lam, beta, delta]
end

.pert_sum(t, lp, d, m, mp, f, zeta_terms, plan1_terms, plan2_terms) ⇒ Object

--- ELP 攝動級數求和(單位 1e-6 度)。內部方法。 --- 引數皆為度:lp = ζ(≡ Meeus of-date L')、d/m/mp/f = Delaunay。 zeta_terms: [iz, iD, iM, iMp, iF, phase, coeff, tpow] plan1_terms: [8 行星, iD, iMp, iF, phase, coeff](Table 1 無 M) plan2_terms: [7 行星, iD, iM, iMp, iF, phase, coeff]



294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
# File 'lib/astro_chart/pure/moon.rb', line 294

def pert_sum(t, lp, d, m, mp, f, zeta_terms, plan1_terms, plan2_terms)
  sum = 0.0

  zeta_terms.each do |iz, id_, im, imp, if_, pha, coeff, tpow|
    arg = pha + iz * lp + id_ * d + im * m + imp * mp + if_ * f
    x = coeff * Math.sin(arg * Core::DEG2RAD)
    sum += tpow == 1 ? x * t : x
  end

  planet = Array.new(8) do |i|
    base, rate = PLANETARY_ARGS[i]
    base + rate * t
  end

  plan1_terms.each do |p1, p2, p3, p4, p5, p6, p7, p8, id_, imp, if_, pha, coeff|
    arg = pha + p1 * planet[0] + p2 * planet[1] + p3 * planet[2] +
          p4 * planet[3] + p5 * planet[4] + p6 * planet[5] +
          p7 * planet[6] + p8 * planet[7] +
          id_ * d + imp * mp + if_ * f
    sum += coeff * Math.sin(arg * Core::DEG2RAD)
  end

  plan2_terms.each do |p1, p2, p3, p4, p5, p6, p7, id_, im, imp, if_, pha, coeff|
    arg = pha + p1 * planet[0] + p2 * planet[1] + p3 * planet[2] +
          p4 * planet[3] + p5 * planet[4] + p6 * planet[5] +
          p7 * planet[6] +
          id_ * d + im * m + imp * mp + if_ * f
    sum += coeff * Math.sin(arg * Core::DEG2RAD)
  end

  sum
end

.rectangular(jd_tt) ⇒ Object

--- 黃道直角座標(平春分點 of date,km)。引數 **JD(TT)**。 ---



328
329
330
331
332
333
334
335
336
337
338
# File 'lib/astro_chart/pure/moon.rb', line 328

def rectangular(jd_tt)
  lam, beta, delta = geometric_position(jd_tt)
  lam_rad  = lam * Core::DEG2RAD
  beta_rad = beta * Core::DEG2RAD
  cb = Math.cos(beta_rad)
  [
    delta * cb * Math.cos(lam_rad),
    delta * cb * Math.sin(lam_rad),
    delta * Math.sin(beta_rad)
  ]
end

.true_node(jd_ut) ⇒ Object

--- 真(密切)北交點視黃經(度,[0,360))。引數 **JD(UT)**。 --- 由 r × v 的角動量向量取升交點方向;速度用 TT 上 ±NODE_DIFF_STEP_DAYS 的中央差分。幾何 Ω(平春分點)+ Δψ = 視位置(真春分點),與 calc_ut 慣例一致。

Raises:



195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
# File 'lib/astro_chart/pure/moon.rb', line 195

def true_node(jd_ut)
  tt = Core.jd_tt(jd_ut)
  r  = rectangular(tt)
  r1 = rectangular(tt - NODE_DIFF_STEP_DAYS)
  r2 = rectangular(tt + NODE_DIFF_STEP_DAYS)
  v = [
    (r2[0] - r1[0]) / (2.0 * NODE_DIFF_STEP_DAYS),
    (r2[1] - r1[1]) / (2.0 * NODE_DIFF_STEP_DAYS),
    (r2[2] - r1[2]) / (2.0 * NODE_DIFF_STEP_DAYS)
  ]
  # h = r × v(黃道直角座標,z 軸指向黃道北極)
  hx = r[1] * v[2] - r[2] * v[1]
  hy = r[2] * v[0] - r[0] * v[2]
  hz = r[0] * v[1] - r[1] * v[0]
  h_norm = Math.sqrt(hx * hx + hy * hy + hz * hz)
  raise Core::DomainError, "degenerate lunar angular momentum at JD(TT)=#{tt}" if h_norm.zero?

  # 升交點方向 n = ẑ × h = (−h_y, h_x, 0) → Ω = atan2(h_x, −h_y)
  omega = Math.atan2(hx, -hy) * Core::RAD2DEG
  dpsi_deg, = Core.nutation(tt)
  Core.norm360(omega + dpsi_deg)
end