Calculation Trace Viewer
表示実験 — A-1: 時刻系変換パイプライン(UTC → TDB → T)
本ビューでは、実装上は関数に吸収される処理も、計算過程の理解と検証のために段階的に表示しています。
これは最適化されたコード表現ではなく、数学的な導出と実装可能な中間ステップを対応させるための表示です。
Stella-JS 実装値を読み込み中...
変換パイプライン全体像
概要
暦日時(UTC)
→
JD(UTC)
→ +ΔT →
JD(TT)
→ +δ(TDB-TT) →
JD(TDB)
→ (JD−J2000)/36525 →
T
BSP ファイル(de440s.bsp)は TDB(太陽系力学時)を入力として要求する。
観測・記録された時刻は UTC(協定世界時)のため、この変換が必要になる。
Step 0 — 入力値・JD(UTC) の算出
① 入力値
$Y = ?,\quad M = ?,\quad D = ?,\quad h = ?,\quad m = ?,\quad s = 0$
(読み込み中…)
UTC:協定世界時。閏秒を含む国際標準時。
② 定義・公式(グレゴリオ暦 → Julian Day Number)
1月・2月は前年の 13・14 月として扱う(月をゼロ起点に揃えるための変換):
$$a = \left\lfloor \frac{14 - M}{12} \right\rfloor, \quad
y = Y + 4800 - a, \quad
m' = M + 12a - 3$$
Julian Day Number(JDN、整数部):
$$\text{JDN} = D + \left\lfloor \frac{153m' + 2}{5} \right\rfloor + 365y
+ \left\lfloor \frac{y}{4} \right\rfloor
- \left\lfloor \frac{y}{100} \right\rfloor
+ \left\lfloor \frac{y}{400} \right\rfloor - 32045$$
時刻の小数部を加えて JD(実数)に変換:
$$\text{timeFrac} = \frac{h + m/60 + s/3600}{24}, \quad
\text{JD} = \text{JDN} - 0.5 + \text{timeFrac}$$
出典:Jean Meeus『Astronomical Algorithms』第7章(グレゴリオ暦版)。
JDN は正午(UT 12:00)起点の整数。JD は正午起点の実数なので −0.5 のオフセットが付く。
floor(y/4) − floor(y/100) + floor(y/400) がグレゴリオ暦の閏年補正。
floor((153m'+2)/5) は月ごとの累積日数(各月が 30 or 31 日の交互パターンを符号化)。
② 補足:floor() とは
floor(x) は「x 以下の最大の整数」を返す関数(切り捨て、負方向)。
例:floor(1.083) = 1 / floor(306.4) = 306 / floor(−0.5) = −1(負の場合は注意)
Meeus の公式でこれを使う理由:月・年のインデックスへの変換は整数演算であり、小数部分は不要なため。
⑤ 出力
$\text{JD(UTC)} = $
...
J2000.0 の定義値(2451545.0)と完全に一致することが確認できる。
時刻 12:00 UTC → timeFrac = 0.5 → JDN − 0.5 + 0.5 = JDN(整数値のまま)。
Step 1 — ΔT の算出(UTC → TT)
① 入力値
$\text{JD(UTC)} = $
...
Step 0 の出力(グレゴリオ暦 UTC → Julian Date 変換の結果)をそのまま受け取る。
計算中...
② 定義・公式
$$\Delta T = TT - UTC \quad [\text{秒}]$$
2000年前後(1986〜2005年)は Espenak & Meeus の多項式(Morrison & Stephenson 2004 改訂):
$$u = \frac{\text{year} - 2000}{100}, \quad \Delta T = 63.86 + 0.3345\,u - 0.060374\,u^2 + 0.0017275\,u^3 + \cdots \quad [\text{秒}]$$
出典:Espenak & Meeus『Five Millennium Canon of Solar Eclipses』Appendix.
ΔT は地球の自転速度の変化に由来する経験的補正量。2017年以降は IERS 実測値テーブルを使用。
⑤ 出力
$\Delta T = $
... 秒
$\text{JD(TT)} = \text{JD(UTC)} + \dfrac{\Delta T}{86400} = $
...
86400 = 1日の秒数。JD の単位は「日」なので秒を日に換算して加算する。
Step 2 — TDB 補正(TT → TDB)
① 入力値
$\text{JD(TT)} = $
...
Step 1 の出力(JD(UTC) + ΔT/86400)をそのまま受け取る。
② 定義
TDB(Barycentric Dynamical Time・太陽系力学時)とは:
太陽系の重心(太陽系バリセンター)を基準にした時刻系。
地球は楕円軌道を描くため、相対論的効果(重力ポテンシャルの変化)によって
地球上の時計(TT)との間に周期的なずれ(最大 ±1.7 ms)が生じる。
BSP ファイルへの惑星位置問い合わせには TDB を使う必要がある。
時刻系の対応関係(数値で見ると):
計算中...
③ 公式
$$T_{TT} = \frac{\text{JD(TT)} - 2451545.0}{36525}$$
$$M = 6.24006 + 628.302 \times T_{TT} \quad [\text{rad}] \quad \text{(地球の平均近点角)}$$
$$\delta(\text{TDB} - \text{TT}) = 0.001657 \times \sin\!\bigl(M + 0.01671 \times \sin M\bigr) \quad [\text{秒}]$$
$$\text{JD(TDB)} = \text{JD(TT)} + \frac{\delta}{86400}$$
出典:Fairhead & Bretagnon 1990(精度 0.1 ms の近似式)。
J2000.0 付近($T_{TT} \approx 0$)では $M \approx 6.24$、$\sin M \approx -0.043$ → $\delta \approx -0.00007$ 秒(ほぼゼロ)。
⑤ 出力
$\delta(\text{TDB}-\text{TT}) = $
... 秒
$\text{JD(TDB)} = $
...
Step 3 — T(ユリウス世紀数)の導出
① 入力値
$\text{JD(TDB)} = $
...
$\text{J2000\_JD} = 2451545.0$(定義値) $\text{JULIAN\_CENTURY} = 36525$(日)
36525 = 365.25 × 100。1ユリウス世紀 = 100ユリウス年 = 36525日。
Stella-JS では constants.js に定数として定義されている。
② 定義・公式
$$T = \frac{\text{JD(TDB)} - 2451545.0}{36525}$$
$T = 0$:J2000.0(2000年1月1日 12:00 TT)
$T = 1$:J2100.0(2100年1月1日 12:00 TT)
この $T$ を黄道傾斜角・歳差・章動などの多項式近似式の変数として使用する。
まとめ — 変換チェーン全体
計算中...
ΔT(UTC→TT):地球の自転速度変化による経験的補正(秒オーダー)
δ(TDB−TT):地球軌道の楕円性による周期的補正(ミリ秒オーダー、J2000.0 付近は ≒ 0)
BSP ファイルへの入力は JD(TDB)。観測時刻(UTC)からここまでが Layer A の入力準備ステップ。