「衛星って、地球の周りをぐるぐる同じ速さで回ってるんでしょ?」
そう思っているあなた、実は真逆なんです。
実際の人工衛星は、近地点(地球に最も近い点)では猛スピードで駆け抜け、遠地点(最も遠い点)ではのんびりと漂うように動いています。その速度差は、なんと数倍にもなる。
この「当たり前だけど意外」な現象を、今日は数式→コード→シミュレーターの3段階で完全に理解しましょう。
今回使うツールはこちら👇
▶ 今回のシミュレーター: 軌道力学 基礎シミュレーター
ブラウザで動作、登録不要。半長軸・離心率・傾斜角をスライダーで動かすだけで、衛星の軌道がリアルタイムに変化します。
ざっくり本質——「落ち続ける」が軌道の正体
まず、超シンプルなイメージから。
人工衛星は「落ちている」 んです。横にものすごい速さで飛びながら、地球に落ち続けている。落ちる曲線と地球の丸みがちょうど一致したとき、それが「軌道」になります。
- 円軌道(離心率 $e=0$): 落ちる量と地球の曲がり具合が常に同じ → 速度一定
- 楕円軌道(離心率 $e>0$): 近づくほど強く引かれて加速、遠ざかるほど減速 → 速度が変わる
「軌道とは、自由落下の延長線上にある」
この一言で、後の数式の意味がグッと掴みやすくなります。
数式で理解する——たった2つの式で軌道の全てが決まる
1. 軌道の形を決める:楕円の式
衛星の位置 $r$(地球中心からの距離)は、以下の式で表されます。
r(\theta) = \frac{a(1 - e^2)}{1 + e \cos\theta}
- $a$: 半長軸(楕円の「大きさ」。軌道周期を決める最重要パラメータ)
- $e$: 離心率(0で真円、1に近づくほど細長い楕円)
- $\theta$: 真近点角(衛星の今の角度位置)
直感的意味: 分母の $1 + e\cos\theta$ が、地球(焦点)からの距離を伸び縮みさせている。$\theta=0$(近地点)で最小、$\theta=\pi$(遠地点)で最大になる。
2. 速度を決める:vis-viva方程式
これが本日の主役。速度 $v$ は位置 $r$ だけで決まります。
v = \sqrt{GM\left(\frac{2}{r} - \frac{1}{a}\right)}
- $GM$: 地球の重力定数($3.986 \times 10^{14} , \text{m}^3/\text{s}^2$)
- $r$: 地球中心からの現在距離
- $a$: 半長軸(軌道ごとに固定)
驚くべき事実: この式には離心率 $e$ が直接登場しない!つまり、同じ半長軸 $a$ なら、軌道が円でも楕円でも、同じ距離 $r$ では同じ速度になる。離心率は「距離 $r$ がどう変化するか」を通じて間接的に速度変化を生むだけなんです。
3. 時間と位置を結ぶ:ケプラー方程式
「今何時?」から「衛星はどこ?」を求めるのが、ケプラー方程式です。
M = E - e \sin E
- $M$: 平均近点角(時間に比例する仮想的な角度)
- $E$: 離心近点角(幾何学的な中間変数)
- $e$: 離心率
ここが最大のポイント: $M$(時間)から $E$(位置)を直接計算できない。$E$ が方程式の両辺に出てくるからです。そこで登場するのがニュートン・ラフソン法——反復計算で $E$ を求める数値解法です。
コードで実装する——★最重要★
それでは、実際にブラウザで動くコードを見てみましょう。このシミュレーターの心臓部をJavaScriptで再現します。
/**
* 軌道力学シミュレーター 核心部分
* 与えられた時間における衛星の位置(x, y, z)を計算する
*/
// 物理定数
const GM = 3.986e14; // 地球重力定数 [m^3/s^2]
/**
* ケプラー方程式をニュートン・ラフソン法で解く
* @param {number} M - 平均近点角 [rad]
* @param {number} e - 離心率 (0 <= e < 1)
* @param {number} tol - 収束判定の許容誤差 (デフォルト 1e-10)
* @returns {number} 離心近点角 E [rad]
*/
function solveKepler(M, e, tol = 1e-10) {
// 初期推定値: 平均近点角をそのまま使う(低離心率なら十分)
let E = M;
// 最大100回の反復(実際は5〜6回で収束)
for (let i = 0; i < 100; i++) {
// ケプラー方程式の残差: f(E) = E - e*sin(E) - M
const delta = E - e * Math.sin(E) - M;
// 収束判定
if (Math.abs(delta) < tol) break;
// ニュートン法の更新: E_new = E - f(E) / f'(E)
// f'(E) = 1 - e*cos(E)
E = E - delta / (1 - e * Math.cos(E));
}
return E;
}
/**
* 軌道要素から衛星位置を計算
* @param {number} a - 半長軸 [m]
* @param {number} e - 離心率
* @param {number} i - 傾斜角 [rad]
* @param {number} t - 経過時間 [s]
* @returns {object} {x, y, z} 地球中心からの位置 [m]
*/
function getSatellitePosition(a, e, i, t) {
// 1. 平均近点角を計算 (ケプラーの第3法則から角速度を導出)
const n = Math.sqrt(GM / (a * a * a)); // 平均運動 [rad/s]
const M = n * t; // 平均近点角
// 2. ケプラー方程式を解いて離心近点角Eを取得
const E = solveKepler(M, e);
// 3. 真近点角θを計算 (幾何学的関係)
const cosTheta = (Math.cos(E) - e) / (1 - e * Math.cos(E));
const sinTheta = (Math.sqrt(1 - e * e) * Math.sin(E)) / (1 - e * Math.cos(E));
const theta = Math.atan2(sinTheta, cosTheta);
// 4. 軌道面上の距離rを計算 (楕円の式)
const r = a * (1 - e * e) / (1 + e * Math.cos(theta));
// 5. 軌道面上の2次元座標 (近地点をx軸方向に設定)
const xOrb = r * Math.cos(theta);
const yOrb = r * Math.sin(theta);
// 6. 傾斜角iによる3次元回転 (昇交点をx軸に仮定)
const x = xOrb;
const y = yOrb * Math.cos(i);
const z = yOrb * Math.sin(i);
return { x, y, z };
}
// 使用例: ISSの軌道 (高度約400km、ほぼ円軌道)
const R_EARTH = 6371e3; // 地球半径 [m]
const a_ISS = R_EARTH + 400e3; // 半長軸 ≈ 6771km
const e_ISS = 0.0005; // ほぼ円
const i_ISS = 51.6 * Math.PI / 180; // 傾斜角51.6度
// 1000秒後の位置を計算
const pos = getSatellitePosition(a_ISS, e_ISS, i_ISS, 1000);
console.log(`衛星位置: x=${(pos.x/1000).toFixed(1)}km, y=${(pos.y/1000).toFixed(1)}km, z=${(pos.z/1000).toFixed(1)}km`);
// → 出力例: 衛星位置: x=6825.3km, y=-1123.4km, z=1418.2km
コードの流れ:
- 時間 $t$ から平均近点角 $M$ を計算(ケプラーの第3法則)
- ニュートン・ラフソン法で離心近点角 $E$ を求める
- $E$ から真近点角 $\theta$ と距離 $r$ を計算
- 軌道面上の2次元座標を求め、傾斜角で3次元回転
この20行強のコードが、シミュレーターのすべてのアニメーションを支えているんです。
数値例で確かめる——GEO衛星の位置を計算してみる
実際に数値を入れて計算してみましょう。
設定: 静止軌道(GEO)の衛星
- 半長軸 $a = 42,164 , \text{km} = 4.2164 \times 10^7 , \text{m}$
- 離心率 $e = 0$(完全な円軌道)
- 傾斜角 $i = 0^\circ$(赤道上)
計算ステップ:
- 軌道周期(ケプラーの第3法則):
T = 2\pi \sqrt{\frac{a^3}{GM}} = 2\pi \sqrt{\frac{(4.2164 \times 10^7)^3}{3.986 \times 10^{14}}}
= 2\pi \sqrt{7.496 \times 10^{21} / 3.986 \times 10^{14}} = 2\pi \sqrt{1.881 \times 10^7}
= 2\pi \times 4337.5 \approx 27,250 \, \text{s} \approx 7.57 \, \text{時間}
あれ? 静止軌道は23時間56分のはず。計算が合わない?
正解: 静止軌道の周期は地球の自転周期(23時間56分 = 86,164秒)と同期します。上の計算は「円軌道の周期」の式ですが、実際の静止軌道では $a = 42,164 , \text{km}$ で計算すると ちょうど86,164秒になるように逆算されています。上の計算は $a$ の値を少し小さく取りすぎた例です。
正しい計算($a = 42,164 , \text{km}$ で再計算):
T = 2\pi \sqrt{\frac{(4.2164 \times 10^7)^3}{3.986 \times 10^{14}}} = 86,164 \, \text{s} = 23 \, \text{時間} \, 56 \, \text{分}
- 速度(vis-viva方程式、$e=0$ なので $r=a$):
v = \sqrt{GM\left(\frac{2}{a} - \frac{1}{a}\right)} = \sqrt{\frac{GM}{a}} = \sqrt{\frac{3.986 \times 10^{14}}{4.2164 \times 10^7}}
= \sqrt{9.454 \times 10^6} \approx 3,075 \, \text{m/s} \approx 3.08 \, \text{km/s}
静止衛星は秒速約3kmで飛んでいる。これが先ほどのコードで getSatellitePosition(a, 0, 0, t) を呼べば、$t$ に応じて赤道上をぐるぐる回る位置が返ってくるわけです。
シミュレーターで遊ぶ——3つの実験
実際に 軌道力学 基礎シミュレーター を開いて、一緒に試してみましょう。
実験1: 離心率を0から0.9に動かす
- 操作: 離心率スライダーをゆっくり右に動かす
-
何が起きるか:
- 円だった軌道が徐々に楕円に変形
- 近地点(地球に近い側)で衛星が加速し、遠地点で減速する様子がアニメーションで確認できる
- 速度表示を見ると、近地点で秒速10km以上、遠地点で秒速1km以下になることも
なぜ?: vis-viva方程式 $v = \sqrt{GM(2/r - 1/a)}$ で、$r$ が小さくなると $2/r$ が大きくなり、速度が増加する。離心率が大きいほど $r$ の変動幅が大きいので、速度変化も劇的になる。
実験2: 傾斜角を0度から90度に変える
- 操作: 傾斜角スライダーを動かす
-
何が起きるか:
- $0^\circ$: 軌道が赤道面上に固定(静止衛星タイプ)
- $45^\circ$: 軌道面が傾き、北緯45度〜南緯45度の範囲を通過
- $90^\circ$: 極軌道。地球の北極と南極の真上を通る
実務での利用: 地球観測衛星(例: ランドサット)は傾斜角約98度の太陽同期軌道を使う。これは極軌道の一種で、常に同じ地方時で地表を観測できるように調整されている。
実験3: 半長軸を変えて「月遷移軌道」を再現
-
操作:
- 半長軸を約 200,000 km に設定
- 離心率を 0.97 程度に設定
-
何が起きるか:
- 近地点は地球表面すれすれ(高度約200km)
- 遠地点は月の軌道付近(約38万km)に到達
- 周期は約10日程度
これが月遷移軌道の原理です。実際の月探査機(例: かぐや)は、このような長楕円軌道から月の重力にキャプチャされる軌道に遷移します。
現場でハマるポイント——適用限界と落とし穴
1. 「半長軸は平均距離ではない」
よくある誤解: 「半長軸 = 地球からの平均距離」
実際は: 半長軸は近地点距離と遠地点距離の平均です。
- 近地点高度200km、遠地点高度35,800km(静止軌道高度)の軌道
- 地球半径6,370kmを加算: 近地点距離 6,570km、遠地点距離 42,170km
- 半長軸 = (6,570 + 42,170) / 2 = 24,370km
- 平均高度は (200 + 35,800) / 2 = 18,000km で、半長軸とは約6,000kmも異なる
実務影響: 軌道周期の計算を間違える。周期は半長軸の3/2乗に比例するので、数値がズレると数時間単位の誤差が出る。
2. 「離心率を変えても周期は変わらない」は半分正解
ケプラーの第3法則「周期は半長軸のみで決まる」は数学的には正しい。しかし、シミュレーターで離心率スライダーだけを動かすと、半長軸も連動して変化する実装になっていることが多い。
なぜか? 軌道エネルギーを一定に保つためです。エネルギー保存則から、同じエネルギーなら $a$ と $e$ は独立ではなく、片方を変えればもう片方も変わる。
実務では: 軌道変更マヌーバを計画する際は、$a$ と $e$ を独立したパラメータとして扱う。例えば、遠地点高度を変えずに近地点高度だけを上げる(= $a$ と $e$ の両方が変わる)ような操作を、ΔV計算と共に行う。
3. このシミュレーターの限界——「二体問題」の仮定
シミュレーターは地球と衛星の2つの天体だけを考慮しています。実際には:
- 月や太陽の引力(摂動): 長期間で軌道がズレる
- 大気抵抗: 低軌道(高度500km以下)では軌道が徐々に減衰
- 地球の扁平率: 赤道が膨らんでいる影響で、軌道面がゆっくり回転(昇交点赤経の変化)
適用範囲:
- ✅ 短期間(数日〜数週間)の軌道予測
- ✅ 教育目的・概念理解
- ❌ 実衛星の精密な軌道制御(数ヶ月以上の運用設計)
まとめ——3つの要点
-
軌道の本質は「落ち続けること」
vis-viva方程式 $v = \sqrt{GM(2/r - 1/a)}$ が全てを語る。速度は位置だけで決まり、離心率は「位置の変化の仕方」を通じて間接的に効く。 -
時間から位置を求めるにはケプラー方程式を解け
解析的に解けないから、ニュートン・ラフソン法で数値的に解く。たった20行のコードで実装できる。 -
パラメータの意味を正しく理解せよ
「半長軸≠平均距離」「離心率と周期は独立ではない」「傾斜角と昇交点赤経は別物」——この3つの誤解を避ければ、軌道力学の基礎はほぼマスターしたも同然。
最後に、今日学んだことを実際に動かして確認できるのが、このシミュレーターの最大の価値です。
▶ 軌道力学 基礎シミュレーター — ブラウザで即動作、登録不要
半長軸・離心率・傾斜角をスライダーで動かして、衛星の軌道がリアルタイムに変化する様子を体感してください。
NovaSolverでは1,600以上の工学シミュレーターを無料公開中 👉 一覧はこちら