星の軌跡の長さ計算
星の軌跡長計算ツールは、カメラや望遠鏡が空を追尾しない場合に、露出中の天体が見かけ上どれだけ移動するかを推定します。露出時間を秒で、天体の赤緯を度で入力すると、理想的な軌跡の角度長が度単位で返されます。地球の平均恒星時自転速度と赤緯の余弦による投影を用いるため、星空写真の計画、露出時間の比較、撮像センサー上で予想される動きの確認に役立ちます。
無料で実行
計算される軌跡長が表すもの
地球は恒星日に遠方の星々に対して1回転するため、固定されたカメラの視野では、露出中に星が移動しているように見えます。この計算ツールは、その理想的な見かけの動きの角度長を度単位で示します。天の赤道上の天体は最も大きな円を描き、恒星時自転速度がそのまま反映されます。赤緯が北または南の天の極へ近づくほど、極の周囲に描く円が小さくなるため、同じ露出時間でも角度上の軌跡は短くなります。絶対値が同じ正負の赤緯では、余弦による投影が対称なので同じ長さになります。この結果は空における角運動を表すもので、ピクセル単位の距離や天体が宇宙空間を実際に移動した距離ではありません。センサー上の長さへ換算するには、通常は1ピクセル当たりの秒角で表される画像スケールが必要です。モデルは光学系が完全に固定され、理想的な恒星運動だけが生じると仮定しています。追尾、極軸合わせの誤差、大気差、視野回転、レンズ歪曲、恒星の固有運動は含みません。
露出時間と赤緯を式へ適用する方法
計算式は L = t × (360 / 86164.0905) × cos(δ) です。Lは度単位の軌跡の角度長、tは秒単位の露出時間、86164.0905秒は採用した平均恒星日、δは余弦を求めるため度からラジアンへ変換した赤緯です。露出時間は結果へ比例して作用し、露出を2倍にすると理想的な軌跡長も2倍になります。赤緯は幾何学的な投影を決めます。0度では全速度、60度では半分となり、理想モデルではどちらの極でもゼロになります。入力できる赤緯は-90度から+90度までの有限値で、両端を含みます。露出時間も有限値で、物理的な意味を持たない負の値は指定できません。ゼロは有効で、軌跡長もゼロになります。ブラウザーとAPIで安定した結果を返すため、値は小数点以下12桁に丸められます。採用した定数を明確にし、監査やより大きな撮像計算で再利用できるよう、自転速度も結果に含まれます。
天体写真の計画で結果を活用する方法
固定三脚で撮影する前や、意図的な星の軌跡を構成する前に、角度長を使って複数の露出候補を比較できます。軌跡を秒角で求めるには、返された度の値に3,600を掛けます。撮像系の画像スケールが1ピクセル当たりの秒角で分かっている場合は、その秒角長を画像スケールで割ると、センサー上の軌跡をピクセル単位で推定できます。これにより、動きが設定した鮮明さの許容範囲内に収まるか、目に見える伸びになるかを判断できます。式が依存するのは露出時間と赤緯だけです。焦点距離、画素ピッチ、センサー寸法は角運動を変えませんが、画像上での見え方には大きく影響します。超広角レンズでは短い軌跡が目立たない場合がありますが、長焦点では同じ角変位がより多くのピクセルに現れます。追尾架台の場合、この値は残留軌跡ではなく、架台が打ち消そうとする動きを表します。APIによる自動計算は1回$0.002で、決定的な計算はブラウザー内でもローカルに実行できます。
活用例
固定三脚での露出を選ぶ
追尾なしで星空を撮影する前に、対象の赤緯における複数の露出時間について軌跡長を比較できます。
意図的な星の軌跡を計画する
星の軌跡写真を構成する際、1枚の画像内で星が蓄積する角度上の弧を推定できます。
動きをセンサーのピクセルへ換算する
角度の結果と1ピクセル当たりの秒角を組み合わせ、検出器上の軌跡長を推定できます。
よくある質問
どの計算式を使用しますか?
軌跡長 = 露出秒数 × (360 / 86164.0905) × cos(赤緯) を使用し、得られた角度長を度単位で示します。
赤緯によって軌跡長が変わるのはなぜですか?
天の赤道付近の星は極付近の星より大きな見かけの円を描くため、赤緯の余弦で恒星時速度を小さな経路へ投影します。
露出時間をゼロにできますか?
はい。0秒の露出は有効で軌跡長もゼロになります。負の露出時間を指定すると入力エラーになります。
結果を秒角やピクセルへ換算するにはどうしますか?
度の値に3,600を掛けて秒角にし、その値を撮像系の1ピクセル当たりの秒角で割ります。
追尾架台の動作も計算に含まれますか?
いいえ。固定系における理想的な恒星時の見かけの動きを求めます。架台はこの動きを打ち消しますが、残留誤差には別のモデルが必要です。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/astro/star-trail-length \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"exposure_seconds":120,"declination_deg":30}'const res = await fetch("https://api.kit.forhosting.com/astro/star-trail-length", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"exposure_seconds": 120,
"declination_deg": 30
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/astro/star-trail-length",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"exposure_seconds": 120,
"declination_deg": 30
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/astro/star-trail-length", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"exposure_seconds":120,"declination_deg":30}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"exposure_seconds":120,"declination_deg":30}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/astro/star-trail-length", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"exposure_seconds": 120,
"declination_deg": 30
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "astro.star_trail_length",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |