潮流を考慮した合成針路計算機
水が流れていると、船は船首が向く方向どおりには海底上を進みません。この計算機は、船の対水速度ベクトルと潮流ベクトルを加算し、実際の対地針路と対地速力を求めます。船首方位、対水速力、潮流が流れていく方位、潮流速度を入力してください。両方の動きを東成分と北成分に分解して加算し、合成ベクトルを航海方位と速力へ戻します。航海術の演習、短い航程の概算、訓練、シミュレーション、再現可能なAPI計算にご利用いただけます。
無料で実行
方位と速力の基準を統一して入力してください
すべての方向は真北から時計回りに測る方位として扱います。0度は北、90度は東、180度は南、270度は西です。船首方位は船首と対水速度が向く方向を表します。潮流方位には、水が来る方向ではなく流れていく方向を入力してください。資料によって表現方法が異なるため、必要なら入力前に反転します。船速と潮流速には、ノット、キロメートル毎時、メートル毎秒など同じ単位を使用してください。ベクトル加算後も単位は維持されますが、異なる単位を混ぜると結果は無意味です。通常範囲外の角度は正規化され、速力には有限の0以上の値が必要です。真方位を使えば真針路が得られます。磁気方位を使う場合は全方向の基準をそろえるか、偏差を別途補正してください。
計算結果を生むベクトル加算をご確認ください
計算では東軸と北軸を使用します。速力v、方位thetaの東成分はvとthetaの正弦の積、北成分はvとthetaの余弦の積です。航海方位は北を起点に時計回りで増えるため、正のx軸を起点とする一般的な教科書の式とは並びが異なります。船と潮流の東成分、北成分をそれぞれ加えます。合成ベクトルの長さが対地速力で、2引数の逆正接から方向を求め、0度以上360度未満へ正規化します。応答には船、潮流、対地の各ベクトルも含まれるため、符号と計算過程を検証できます。自動処理を安定させるため、値は小数点以下10桁に丸めます。等しい逆向きのベクトルが完全に相殺すると対地速力は0になり、方向を定義できないためエラーになります。
モデルの適用範囲内で結果をご利用ください
返される針路は、平面上で2本の速度ベクトルが一定であると仮定した瞬間値です。海図演習、短時間の概算、シミュレーター、航海計画の初期検討に適しています。潮流の時間変化、風による圧流、操舵誤差、磁気偏差、波、加速、海図投影、障害物は考慮しません。実航海では航路を適切な区間に分け、各地点と時刻の潮流予報を用い、条件が変わるたびに再計算してください。本機能は、対水針路から対地運動を求める順問題を解きます。目標の対地航跡を得る船首方位の決定は別の逆問題です。保存時には単位と方位基準も結果に添えてください。ブラウザーとAPIは同じ決定論的な処理を使い、正常な自動計算1件の料金は $0.002 です。教材、記録、航海ソフトウェアの軽量テストにも適しています。
活用例
航海術の演習を確認
手描きの速度三角形を検算し、算出した対地針路を作図解答と比較できます。
短い航程を概算
予定する船首方位と対水速力に代表的な潮流を加え、初期見積もりを作成できます。
シミュレーター用データを作成
海事訓練、単体テスト、教材表示向けの再現可能な対地ベクトルを生成できます。
よくある質問
潮流方位は何を意味しますか?
潮流が流れていく先の方位です。資料が流れて来る方向を示す場合は180度反転してください。
どの速力単位を使用できますか?
船速と潮流速で同じ単位を使えば、どの単位でも計算できます。結果もその単位になります。
方位は真方位ですか、磁気方位ですか?
どちらも計算できますが、全方向の基準を統一してください。真方位入力なら真針路になります。
合成針路が存在しないのはなぜですか?
等しい逆向きのベクトルでは速力が0になります。零ベクトルには方向がないため拒否されます。
API計算の料金はいくらですか?
正常に処理された1件につき $0.002 です。ブラウザー版も同じ決定論的計算を使います。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/trig/resultant-course-current \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"heading_degrees":90,"vessel_speed":10,"current_direction_degrees":180,"current_speed":3}'const res = await fetch("https://api.kit.forhosting.com/trig/resultant-course-current", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"heading_degrees": 90,
"vessel_speed": 10,
"current_direction_degrees": 180,
"current_speed": 3
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/trig/resultant-course-current",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"heading_degrees": 90,
"vessel_speed": 10,
"current_direction_degrees": 180,
"current_speed": 3
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/trig/resultant-course-current", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"heading_degrees":90,"vessel_speed":10,"current_direction_degrees":180,"current_speed":3}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"heading_degrees":90,"vessel_speed":10,"current_direction_degrees":180,"current_speed":3}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/trig/resultant-course-current", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"heading_degrees": 90,
"vessel_speed": 10,
"current_direction_degrees": 180,
"current_speed": 3
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "trig.resultant_course_current",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |