質問: 過去の春分の日などを計算で割り出したいです。
回答: 実はとてもむずかしいです。 ただ、俣にあふれている式は、2000年以降とかここ数百年に限定した式です。 それでもここ数百年を正しく計算するのは大変なことです。 参考 春分の日計算というのは、太陽の位置(黄経)、つまりは 地球の位置 を正確に計算するということです。 何故かというと、春分の瞬間が23:59:59の場合、 1秒だけ計算結果がずれると春分日が1日ずれます。 それだけの精度で太陽の位置を計算するということです。 以下では、グレゴリオ暦以降、2500年くらいまでの春分の日を 予測していますが、未来日だと地球に自転速度の影響が未知で その変化を予測して計算していますが、誰にも正しい値は 判らないので、その変化(δT)を変更して試算できるようにしています。 太陽の位置の計算はこんな感じです。 function CalcLambdaS(mjd,dty) { // 太陽視黄経の計算 var ys; dt = ((mjd - 51544.5)*dty/365.2425 + 64)/86400; // δTの概算(指定値を使用) Ts = (mjd - 51544.5 + dt) / 365.25; ys = 280.4603 + 360.00769 * Ts; ys = ys + (1.9146 - 0.00005 * Ts) * Math.sin((359.991 * Ts + 357.538) *DEG); ys = ys + 0.0200 * Math.sin((719.981 * Ts + 355.05) *DEG); ys = ys + 0.0048 * Math.sin((19.341 * Ts + 234.95) *DEG); ys = ys + 0.0020 * Math.sin((329.64 * Ts + 247.1) *DEG); ys = ys + 0.0018 * Math.sin((4452.67 * Ts + 297.8) *DEG); ys = ys + 0.0018 * Math.sin((0.20 * Ts + 251.3) *DEG); ys = ys + 0.0015 * Math.sin((450.37 * Ts + 343.2) *DEG); ys = ys + 0.0013 * Math.sin((225.18 * Ts + 81.4) *DEG); ys = ys + 0.0008 * Math.sin((659.29 * Ts + 132.5) *DEG); ys = ys + 0.0007 * Math.sin((90.38 * Ts + 153.3) *DEG); ys = ys + 0.0007 * Math.sin((30.35 * Ts + 206.8) *DEG); ys = ys + 0.0006 * Math.sin((337.18 * Ts + 29.8) *DEG); ys = ys + 0.0005 * Math.sin((1.50 * Ts + 207.4) *DEG); ys = ys + 0.0005 * Math.sin((22.81 * Ts + 291.2) *DEG); ys = ys + 0.0004 * Math.sin((315.56 * Ts + 234.9) *DEG); ys = ys + 0.0004 * Math.sin((299.30 * Ts + 157.3) *DEG); ys = ys + 0.0004 * Math.sin((720.02 * Ts + 21.1) *DEG); ys = ys + 0.0003 * Math.sin((1079.97 * Ts + 352.5) *DEG); ys = ys + 0.0003 * Math.sin((44.43 * Ts + 329.7) *DEG); ys = ys % 360.0; if (ys < 0) ys = ys + 360.0; return ys; }