2つの方位角の最小角度を求める計算機
この方位角計算機は、2つのコンパス方向の間にある最小の角度を求めます。2つの方位を度で入力すると、比較前にそれぞれを正規化するため、通常の0度から360度の範囲外の値も使用できます。結果は常に0度以上180度以下の絶対角度です。北をまたぐケースも正しく扱われ、たとえば350度と10度の間隔は340度ではなく20度になります。
無料で実行
2つの方位を入力して結果を読む方法
第1方位と第2方位には、北を基準に時計回りで測った度数を数値で入力してください。0度は北、90度は東、180度は南、270度は西を示します。航法機器や別の計算から1度未満の精度で針路が得られる場合に備え、小数も入力できます。また、計算機が各値を1回転内の同じ方向へ正規化するため、負の値や360を超える値も利用できます。たとえば-10度は350度と同じ方向であり、725度は5度と同じ方向です。返される角度は絶対的な間隔なので、2つの方位を入れ替えても答えは変わりません。結果が0度なら両方が同じ方向を示し、180度なら正反対です。それ以外の値は2方向間の短い側の回転量を表しますが、左舷・右舷、左・右、時計回り・反時計回りのどちらであるかは示しません。
単純な引き算では誤った角度になる理由
コンパス方位は円周上に並び、数値の両端がつながっています。0度と360度はいずれも北です。そのため、一方から他方を単純に引くと、この循環する境界を考慮できません。350度と10度を直接引いた絶対差は340度ですが、実際には北を越えて20度しか離れていません。この計算機は、まず両方の入力を0度以上360度未満の範囲に正規化し、その後で直接の絶対差を求めます。その差が180度を超える場合は、円の残りの部分、つまり360から直接差を引いた値を採用します。これにより、答えは必ず最小角度となり、180度以下に収まります。同じ方向を表す複数回転も一貫して処理され、10度と370度は0度、-90度と90度は180度になります。三角関数による近似は不要で、有限の度数入力から再現可能な決定的結果が得られるため、自動検証にも適しています。
航法や経路計画で結果を使う方法
最小角度は、方向変化の符号よりも大きさを知りたい場面で役立ちます。計画した針路と報告された船首方位を比較したり、測量で2つの方位角の間隔を確認したり、経路の曲がり方がどの程度急かを測ったりできます。ただし、結果だけではどちらへ回るべきかは分かりません。一方が20度、他方が300度なら最小間隔は80度ですが、時計回りか反時計回りかを決めるには、どちらを開始方位とするかと、符号付き回転の規則が必要です。この計算機は曖昧さを避けるため、絶対的な最小値だけを返します。また、磁気偏角、コンパス自差、風、潮流、地球表面上の移動形状は考慮しません。比較前に、両方を真方位または両方を磁方位にそろえるなど、同じ基準へ変換してください。自動処理では1回のリクエストが$0.002で、同じ決定的計算をブラウザーでは無料で実行できます。
活用例
船首方位と計画針路を比較する
船舶や航空機が向いている方向と、予定された進行方向との最小差を測定します。
測量方位角の間隔を確認する
北をまたぐ場合も含め、2つの測量方向が鋭角、直角、鈍角、反対方向のどれに当たるか確認します。
経路の方向変化を評価する
0度の境界を大きな迂回と誤認せず、連続する方位間の曲がり角の大きさを計算します。
よくある質問
結果はどの範囲になりますか?
結果は両端を含む0度から180度までの範囲になります。
負の方位や360度を超える値も入力できますか?
はい。有限の入力値は、差を計算する前に同じコンパス方向へ正規化されます。
350度と10度の間隔が20度になるのはなぜですか?
2方向は、尺度が360から0へ戻る北を挟んでいます。その境界を越える短い経路が20度だからです。
左と右のどちらへ回るかも分かりますか?
いいえ。結果は絶対的な最小角度です。回転方向を得るには、開始方位と時計回り・反時計回りの規則が必要です。
真方位と磁方位を比較できますか?
先に同じ基準へ変換してください。この計算機は磁気偏角やコンパス自差を補正しません。
APIリクエストの料金はいくらですか?
APIリクエストは1回$0.002です。ブラウザーでの計算は無料です。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/trig/angle-between-bearings \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"first_bearing":350,"second_bearing":10}'const res = await fetch("https://api.kit.forhosting.com/trig/angle-between-bearings", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"first_bearing": 350,
"second_bearing": 10
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/trig/angle-between-bearings",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"first_bearing": 350,
"second_bearing": 10
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/trig/angle-between-bearings", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"first_bearing":350,"second_bearing":10}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"first_bearing":350,"second_bearing":10}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/trig/angle-between-bearings", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"first_bearing": 350,
"second_bearing": 10
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "trig.angle_between_bearings",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |