ホーマン遷移の打上げ位相角計算
この計算ツールは、ホーマン遷移を開始するときに、目標惑星が出発惑星に対してどの位置にあるべきかを求めます。予定する遷移時間と目標惑星の公転周期を、同じ時間単位で入力してください。飛行中に目標が進む角度を計算し、遷移軌道の到着配置である 180 度から差し引きます。正規化した打上げ位相角だけでなく、計算に使った中間値も確認できます。
無料で実行
打上げ位相角が表す配置
ホーマン遷移では、出発時点に目標惑星がある場所へ宇宙機を向けるわけではありません。宇宙機が楕円形の遷移軌道を半周する間にも、目標惑星は中心天体の周囲を公転し続けるため、出発時には両惑星の間に所定の角度差が必要です。このツールでは、目標惑星の太陽中心黄経から出発惑星の太陽中心黄経を引いた値を位相角とします。角度は公転方向に測り、0 度以上 360 度未満に正規化します。たとえば約 44 度なら、目標が出発惑星より約 44 度先行している配置です。180 度を超える値は負の生角度と同じ向きを正規化した表現であり、300 度は実質的に 60 度遅れを意味します。円軌道、同一平面、宇宙機が中心天体の周囲を 180 度進む理想的なホーマン幾何を仮定した概算であり、完全な実運用軌道ではありません。
角度を求める計算手順
2 つの入力には必ず同じ時間単位をお使いください。日と日、年と年、秒と秒のようにそろえれば、遷移時間を目標公転周期で割った比は無次元になります。最初にその比へ 360 度を掛け、宇宙機の飛行中に目標惑星が進む角度を求めます。次に、ホーマン遷移楕円の出発端と到着端の角度差である 180 度から、その移動角を差し引きます。特殊な仮定値では、生の位相角が負になったり 1 周の範囲外になったりします。そのため、天体暦の黄経と比較しやすい 0 度以上 360 度未満の正規化値も返します。目標の移動角、目標軌道に対する遷移時間の比、正規化前の角度も表示されます。計算過程を検算でき、日と年など異なる単位を誤って組み合わせた場合にも気付きやすくなります。
前提条件と次の解析
この式は、惑星間打上げ窓を最初に概算する用途に適しています。出発天体と目標天体が円形かつ同一平面の軌道を一定角速度で動き、理想的な遷移楕円へ瞬時に投入されると仮定します。実際の惑星軌道には離心率と傾斜があり、速度も一定ではありません。ミッションによっては最小エネルギー軌道より速い、または遅い遷移を選びます。したがって、得られた候補日を運用に用いる前に、惑星天体暦と Lambert 解法による高精度な検討が必要です。この機能は角度を暦日に変換せず、軌道半径から飛行時間を算出せず、会合周期や惑星周回待機軌道も扱いません。同じ基準座標系と時刻の太陽中心黄経を比較し、方向付きの差が結果と一致する時期を探してから、軌道条件と射場条件を加えて候補を精密化してください。
活用例
惑星間打上げ配置の概算
既知のホーマン飛行時間と目標の公転周期から、出発時に必要な角度差を求めます。
軌道力学演習の検算
目標惑星の移動角と正規化した結果を、中間値を参照しながら確認できます。
天体暦候補日の絞り込み
Lambert 解法や詳細なミッション制約を適用する前の一次条件として利用できます。
よくある質問
どの式を使用しますか?
180 度から、360 度に transfer_time を掛けて target_orbital_period で割った値を引き、0 度以上 360 度未満へ正規化します。
時間の単位は何を選べますか?
両方で同じ単位を使えば、日、年、秒などを選べます。日と年を混在させると比と角度が誤ります。
生角度と正規化角度を両方返すのはなぜですか?
生角度は式の直接結果を示し、正規化角度は同じ向きを 1 周内の正の角度として表します。
目標公転周期がゼロだとエラーになるのはなぜですか?
公転周期は角運動計算の分母です。ゼロ除算は定義できず、物理的な意味もありません。
API リクエストの料金はいくらですか?
API の各リクエスト料金は $0.002 です。ブラウザーでも同じ決定論的な解析ロジックを使用します。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/astro/launch-window-phase-angle \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"transfer_time":258.9,"target_orbital_period":686.98}'const res = await fetch("https://api.kit.forhosting.com/astro/launch-window-phase-angle", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"transfer_time": 258.9,
"target_orbital_period": 686.98
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/astro/launch-window-phase-angle",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"transfer_time": 258.9,
"target_orbital_period": 686.98
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/astro/launch-window-phase-angle", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"transfer_time":258.9,"target_orbital_period":686.98}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"transfer_time":258.9,"target_orbital_period":686.98}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/astro/launch-window-phase-angle", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"transfer_time": 258.9,
"target_orbital_period": 686.98
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "astro.launch_window_phase_angle",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |