水平六分儀角による距離計算
この水平六分儀角距離計算ツールは、海図に記載された2つの目標を結ぶ直線から観測者までの距離を求めます。目標間の既知の距離と、一方から他方まで測定した水平角を入力してください。二等辺三角形の厳密な関係を用いて、基線への垂直距離と各目標までの等しい斜距離を算出し、選択した長さの単位を維持します。観測者が目標基線の垂直二等分線上にいると仮定できる、船位決定の演習や計算確認に適しています。
無料で実行
水平角の幾何学的な仕組み
海図上の2つの目標は既知の基線を形成し、観測者を加えると三角形になります。この計算では観測者が基線の垂直二等分線上にいるものとし、両目標への視線距離が等しいと仮定します。観測者から基線の中点へ垂線を引くと、図形は2つの直角三角形に分かれます。それぞれの対辺は目標間距離の半分で、観測者側の角度は測定した水平六分儀角の半分です。したがって、垂直距離は基線の半分を半角の正接で割った値となります。各目標までの斜距離は、基線の半分を半角の正弦で割って求めます。これは小角近似ではなく、指定した幾何学条件に対する厳密な三角関数の関係です。測定角が小さいほど距離は大きくなり、角度が広いほど観測者は基線に近づきます。出力距離には選択した単位がそのまま使われます。
有効な観測値の測定と入力方法
海図上で明確に識別でき、同時に視認できる2つの異なる目標を選んでください。適切な単位で海図上の目標間距離を読み取り、六分儀を水平に構えて一方の目標から他方までの夾角を測定します。数式の内部で使う半角ではなく、測定した角度全体を度で入力してください。角度は0より大きく180より小さい必要があり、目標間距離は正の値でなければなりません。海図で用いたものと同じ単位を選択してください。結果には単位が表示されますが、入力値が暗黙に換算されることはありません。小数桁の設定は表示時の丸めだけに影響し、内部計算の精度は変わりません。狭い角度では、わずかな測角誤差でも距離が大きく変わるため、特に注意が必要です。実際の航海では慎重に測定し、位置が不確かな目標を避け、海図縮尺に適した精度を維持してください。測定を繰り返すと、不安定な視準や目標の取り違えを発見しやすくなります。
1つの角度から求める距離の限界
既知の目標間距離と1つの水平角だけでは、海図上の任意の観測位置を一意に決定できません。一般に、2つの目標を通る特定の円弧上では、同じ弦がどの点からも同じ角度に見えます。このツールが単一の距離を返すのは、観測者が基線の垂直二等分線上にあり、両目標から等距離にあるという対称条件を採用するためです。この条件が問題設定、訓練図、または別途判明している位置の線に合う場合に使用してください。観測者がどちらかの目標側へずれている可能性がある場合、完全な船位として扱うことはできません。実用的な船位には、第三の目標を含む第2の水平角、方位、重視線、レーダー距離など、独立した追加情報が必要です。また、局地的な平面幾何を前提とし、六分儀の器差、目標誤認、海図測地系、屈折、船体運動、眼高を補正しません。安全に関わる判断では、観測値を確認し、承認された航海手順に従ってください。
活用例
沿岸航法の演習を解く
対称な水平角の作図条件で、2目標の基線から観測者までの垂直距離を計算します。
手計算の結果を確認する
作図または手作業で得た距離を、決定論的な高精度の三角関数計算と比較します。
角度誤差の影響を調べる
目標間距離を固定して測定角を変え、観測誤差が距離に及ぼす影響を確認します。
よくある質問
ここでいう垂直距離とは何ですか?
観測者から、海図上の2つの目標を結ぶ直線までの最短距離です。
なぜ観測者が垂直二等分線上にいる必要がありますか?
1本の基線と1つの角度が定めるのは単一点ではなく軌跡です。垂直二等分線によって、両距離が等しい対称解を選びます。
単位は自動的に換算されますか?
換算されません。landmark_distanceに使用した単位を選ぶと、算出される2つの距離にも同じ単位が使われます。
この計算だけで完全な船位を得られますか?
得られません。垂直二等分線上にいることが別途確定していない限り、独立した観測値または位置の線がもう1つ必要です。
APIによる計算の料金はいくらですか?
ブラウザーでの計算は無料で、APIリクエストは$0.002から利用できます。入力検証に失敗したリクエストには料金がかかりません。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/travel/horizontal-sextant-distance \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"landmark_distance":2,"angle_deg":30}'const res = await fetch("https://api.kit.forhosting.com/travel/horizontal-sextant-distance", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"landmark_distance": 2,
"angle_deg": 30
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/travel/horizontal-sextant-distance",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"landmark_distance": 2,
"angle_deg": 30
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/travel/horizontal-sextant-distance", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"landmark_distance":2,"angle_deg":30}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"landmark_distance":2,"angle_deg":30}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/travel/horizontal-sextant-distance", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"landmark_distance": 2,
"angle_deg": 30
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "travel.horizontal_sextant_distance",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |