転がる物体のレース計算
転がる物体のレース計算では、同じ斜面を滑らずに転がる剛体のうち、どれが先に下端へ着くかを予測できます。斜面角度と各物体の無次元慣性係数 k = I/(mr²) を入力すると、物理法則に基づく到着順位、各参加物体の並進加速度、完全な同着の有無が返されます。球、円柱、輪、独自の質量分布を、質量・半径・斜面長を入力せずに比較できます。
無料で実行
公平な転がりレースを設定します
適切に比較するには、すべての物体を同じ直線斜面に置き、滑りのない純粋な転がりを仮定します。水平面から測った斜面角度を入力し、参加物体ごとに1行を追加してください。各行には一意の名前と慣性係数 k が必要です。k は、転がり軸まわりの慣性モーメントを、質量と半径の2乗の積で割った値、つまり k = I/(mr²) です。代表的な理想物体では、中実球が 2/5、中実円柱または円板が 1/2、薄い輪が 1 です。理想的な運動方程式では質量と半径が相殺されるため、それぞれの値を入力する必要はありません。重力は標準的な地球重力が既定値ですが、思考実験や別の天体に合わせて変更できます。全参加物体には同じ重力と傾斜を適用してください。表面での損失、空気抵抗、変形、軸摩擦、開始時の押力はこの理想モデルの対象外です。実験と比べる際は条件をそろえてください。
加速度と到着順位を読み取ります
物体が滑らずに転がるとき、重力による位置エネルギーは、重心の並進運動と重心まわりの回転運動に分配されます。本計算では a = g sin(θ)/(1 + k) を用います。g は重力加速度、θ は斜面角度、k は慣性係数です。k が小さいほど並進運動に使われるエネルギーの割合が大きくなり、並進加速度も高くなります。そのため同じ斜面では、理想的な中実球が中実円柱より先に進み、中実円柱は薄い輪より先に進みます。結果は加速度が大きい順に並びます。同じ慣性係数には同じ順位が付き、理想式では加速度も同一になるため同着と表示されます。JSON の結果を決定的にする目的だけで、同着時には入力順を維持します。0 度ではすべての加速度がゼロです。表示値は小数点以下9桁に丸めますが、順位判定には丸め前の慣性係数を使用します。
結果を適切に活用します
順位一覧は理想的な力学問題への回答であり、実験レースのあらゆる要因を再現するものではありません。全物体が同じ位置で静止状態から出発し、同じ距離を一定加速度で進むなら、加速度の順位がそのまま到着順位になります。したがって順位だけなら斜面長は不要ですが、到着時刻の計算には必要です。実物が滑る、揺れる、跳ねる、転がり抵抗を受ける、または空気抵抗が無視できない場合、結果は予測と異なることがあります。表から慣性係数を選ぶ前に、回転軸と質量モデルが対象物に合うか確認してください。たとえば厚肉円柱は薄い輪とは異なります。慣性モーメント、質量、転がり半径が既知なら、独自の係数で任意の剛体軸対称物を表せます。自動処理での API 料金は1リクエスト $0.002 です。同じ決定的ソルバーをブラウザーでも利用でき、実演、課題確認、実験計画に役立ちます。
活用例
授業の実演を計画します
球、円柱、輪を同じ斜面で同時に放す前に、到着する順番を予測できます。
力学の課題を確認します
無次元慣性係数から加速度を検算し、回転慣性が並進運動へ与える影響を確認できます。
独自の質量分布を比較します
設計した車輪や軸対称物について慣性係数を求めた後、それぞれの順位を比較できます。
よくある質問
どの物体が最初に到着しますか?
記載した仮定の下では、慣性係数が最小の物体が最大の並進加速度を持つため、最初に到着します。
質量と半径を入力しないのはなぜですか?
慣性モーメントを I = kmr² と表すと両者が相殺され、加速度は重力、傾斜、k だけで決まるためです。
2つの物体の慣性係数が同じ場合はどうなりますか?
理想的な転がりでは同じ加速度になるため、同じ順位が付き、同着として表示されます。
滑りも計算に含まれますか?
いいえ。滑らずに転がるための静止摩擦が十分にあると仮定し、エネルギー損失や転がり抵抗はモデル化しません。
重力加速度を変更できますか?
はい。有限の正値をメートル毎秒毎秒で指定できます。既定値は標準的な地球重力です。
API リクエストの料金はいくらですか?
API は1リクエスト $0.002 です。対話的な計算にはブラウザー版をご利用いただけます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/mech/rolling-race \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"angle_degrees":30,"shapes":[{"name":"Solid sphere","inertia_factor":0.4},{"name":"Solid cylinder","inertia_factor":0.5},{"name":"Thin hoop","inertia_factor":1}]}'const res = await fetch("https://api.kit.forhosting.com/mech/rolling-race", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"angle_degrees": 30,
"shapes": [
{
"name": "Solid sphere",
"inertia_factor": 0.4
},
{
"name": "Solid cylinder",
"inertia_factor": 0.5
},
{
"name": "Thin hoop",
"inertia_factor": 1
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/mech/rolling-race",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"angle_degrees": 30,
"shapes": [
{
"name": "Solid sphere",
"inertia_factor": 0.4
},
{
"name": "Solid cylinder",
"inertia_factor": 0.5
},
{
"name": "Thin hoop",
"inertia_factor": 1
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/mech/rolling-race", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"angle_degrees":30,"shapes":[{"name":"Solid sphere","inertia_factor":0.4},{"name":"Solid cylinder","inertia_factor":0.5},{"name":"Thin hoop","inertia_factor":1}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"angle_degrees":30,"shapes":[{"name":"Solid sphere","inertia_factor":0.4},{"name":"Solid cylinder","inertia_factor":0.5},{"name":"Thin hoop","inertia_factor":1}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/mech/rolling-race", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"angle_degrees": 30,
"shapes": [
{
"name": "Solid sphere",
"inertia_factor": 0.4
},
{
"name": "Solid cylinder",
"inertia_factor": 0.5
},
{
"name": "Thin hoop",
"inertia_factor": 1
}
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "mech.rolling_race",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_shapes | 100 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |