斜面上の投射体の射程計算
この計算ツールは、理想的な投射体が直線状の斜面と再び交わる位置を求めます。初速度、水平線を基準にした投射角、符号付きの斜面角を入力してください。上り坂は正、下り坂は負で指定します。結果には斜面に沿った距離、水平射程、鉛直変位、飛行時間が含まれます。重力加速度は一定、空気抵抗はなく、斜面の原点から投射するというモデルです。
無料で実行
投射と斜面の角度を同じ基準で指定します
2つの角度はいずれも水平線を基準にします。投射角は初速度の向きを表し、正の値は上向きです。斜面角も同じ規約で表し、進行方向に上る面は正、下る面は負にします。この符号規約により、上り坂と下り坂を同じ式で扱えます。速度はメートル毎秒で入力してください。既定では地球の標準重力を使いますが、別の環境や天体を想定する場合は正の重力加速度を指定できます。投射角は斜面角より大きくなければなりません。そうでなければ投射体は最初に斜面の上側へ離れず、正の時間が経過した後の2回目の交点が存在しません。また、垂直な壁は水平位置ごとに一意の高さを持つ面として表せないため、両方の角度はマイナス90度より大きく、90度より小さい範囲にしてください。
斜面に沿った射程の求め方
理想的な投射運動は水平成分と鉛直成分に分けて扱います。時刻 t の水平位置は、初速度、投射角の余弦、時間の積です。鉛直位置は初期鉛直速度による上昇から、重力による落下分を差し引いて求めます。同じ水平位置における斜面の高さは、水平位置と斜面角の正接の積です。投射体の高さと斜面の高さを等しくすると、ゼロではない交差時刻が得られます。その時刻から水平射程を求め、斜面角の余弦で割って斜面上の距離へ変換します。平地でない場合、斜面上の距離は水平投影より長いため、この変換が重要です。鉛直変位には符号が付き、上り坂への着地は正、下り坂への着地は負になります。内部計算の精度と再現性を保つため、丸めは出力時にだけ行います。
結果の読み方とモデルの限界
地面やランプに沿った距離が必要な場合は slope_range_m、平面図上の水平座標と比較する場合は horizontal_range_m をお使いください。飛行時間は無限に延びる直線斜面へ正の時間で最初に戻るまでの値であり、空中で進んだ軌道全体の長さではありません。この理想モデルは、空気抵抗、風、揚力、投射体の大きさ、地形の曲率、回転、重力の変化を考慮しません。そのため、力学の学習、概算、シミュレーションの検証、管理された低速実験などに適しています。下り坂では落下中に地面が遠ざかるため射程が大きくなり得ます。上り坂では射程が短くなり、斜面角が投射角に達すると有効な前方飛行がなくなります。実際の投射における安全境界には使用せず、不確かさの余裕と対象・環境に適したモデルをご利用ください。
活用例
斜面上の力学問題を解く
ランプに沿った着地点までの距離を求め、手計算で導いた式と比較できます。
シミュレーションを検証する
空気抵抗のない再現可能な結果を、数値軌道積分器の基準値として利用できます。
上り坂と下り坂を比較する
速度と投射角を固定し、符号付き斜面角だけを変えて交点の移動を確認できます。
よくある質問
計算料金はいくらですか?
このページのブラウザーでは無料で実行でき、API は1回につき $0.002 です。
下り坂の斜面角は正ですか、負ですか?
進行方向に下る面は負、上る面は正の角度で指定してください。
投射角はどこから測りますか?
斜面からではなく、水平線から度数で測ります。正の角度は上向きです。
投射角が斜面角より大きい必要があるのはなぜですか?
投射体が最初に斜面から上へ離れる必要があり、そうでなければ正の時間にわたる飛行が成立しないためです。
空気抵抗は含まれますか?
含まれません。一定重力の理想的な運動であり、抵抗、風、揚力、回転は考慮しません。
斜面射程と水平射程の違いは何ですか?
斜面射程は傾いた面に沿う距離、水平射程はそれを水平軸へ投影した距離です。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/mech/projectile-on-incline-range \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"speed_m_s":30,"launch_angle_deg":45,"incline_angle_deg":15}'const res = await fetch("https://api.kit.forhosting.com/mech/projectile-on-incline-range", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"speed_m_s": 30,
"launch_angle_deg": 45,
"incline_angle_deg": 15
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/mech/projectile-on-incline-range",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"speed_m_s": 30,
"launch_angle_deg": 45,
"incline_angle_deg": 15
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/mech/projectile-on-incline-range", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"speed_m_s":30,"launch_angle_deg":45,"incline_angle_deg":15}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"speed_m_s":30,"launch_angle_deg":45,"incline_angle_deg":15}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/mech/projectile-on-incline-range", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"speed_m_s": 30,
"launch_angle_deg": 45,
"incline_angle_deg": 15
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "mech.projectile_on_incline_range",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |