重心計算機
質点の集まりがどこでつり合うかが分かります。質量2、4、3を (0, 0)、(6, 0)、(0, 6) に置くと、つり合う点は (2.6666666667, 2) で、総質量は9です。直線上、平面上、空間内のどれでも使えます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
処理はブラウザ内で完結します。ファイルは送信されません。無料でご利用いただけます。
点質量系の重心とは、系全体が一点でつり合う位置、すなわち位置の質量加重平均です。この機能は座標付きの点質量のリスト(xは必須、yとzは任意)を受け取り、重心の正確な座標と点数・総質量を返します。1次元では針金上のビーズ、2次元では板上の質量、3次元では空間内の物体に対応し、式は共通です。各質量に位置を掛けて合計し、総質量で割るだけです。総質量がゼロの場合は重心が定義できないため、明確なバリデーションエラーで拒否されます。
重心とは何か、なぜ重要なのか
古典力学では、重心は系の全質量がそこに集中し、すべての外力がそこに作用するかのように運動する点です。レンチを部屋の中に投げても、どんなに回転しようとその重心はきれいな放物線を描きます。モビールが水平に吊るされる点、ロケットの運動方程式が立てられる点、ゲームエンジンが剛体のピボットを置く点も同じ重心です。
離散的な点質量の集合では、定義は単純な加重平均です。各質量に位置を掛け、その積を合計して総質量で割ります。各座標軸は独立に計算されるため、重心のx座標は質量とそのx位置だけで決まり、y・zも同様です。
この計算ツールは、まさにその問いに1D・2D・3Dの系で答えます。宿題を確認する学生、問題生成ツールを作る教師、物理コードを試作する開発者は、ライブラリを組み込まずに信頼できる重心を求めたいときに重心計算ツールを探します。この計算は入力リストだけの純粋関数であり、乱数も時計もネットワークも使わないため、同じ入力からは常に完全に同じ出力が得られます。
負の質量も数学的には受け付けられ、総質量がゼロでない限り、穴やカウンターウェイトのモデル化に時折役立ちます。
入力仕様、バリデーション、使用する式
各オブジェクトにはmassとxが必要で、yとzは任意でデフォルトはゼロです。数値と数値文字列の両方を受け付け、すべての値は有限でなければなりません。点は少なくとも1つ必要で、上限は一万点です。
教室やスクリプトの用途には十分すぎる規模です。エンジンは標準の式を適用します。総質量Mは全質量の合計で、重心の各座標は質量×位置の合計をMで割ったものです。
すべての点で欠けている次元は応答から単純に省略されるため、純粋な1D問題はxだけを返し、yやzを持つ点があれば出力は2D・3Dに拡張されます。数学的に未定義となる唯一のケースは総質量がちょうどゼロの場合で、たとえば正負が等しい2つの質量です。
結果は安定した小数桁数に丸められるため、浮動小数点のノイズがJavaScriptエンジン間の等値チェックを壊すことはありません。経路に物理ライブラリも外部サービスもなく、Workerアイソレート上の算術演算だけで、無料のブラウザツールと同じコードが動いています。
宿題からシミュレーションまでの使い道
物理の問題を解いている途中、2質量のシーソーのつり合いを取るとき、複合物体のピボットを決めるときなど、何もインストールせずにすぐ答えが欲しい場合は無料のブラウザ重心計算ツールをご利用ください。
代表的なワークフローには、静力学の授業で梁上の質量系のつり合い点を求めること、質量の代わりに重みを使うデータサイエンスのデモで離散質量分布のセントロイドを求めること、ゲームオブジェクトの重心がアートワークと一致するかの確認、開発中の物理エンジン向けの既知解答フィクスチャの生成などがあります。
次の段階が静力学ではなく動力学なら、慣性モーメントや力の計算ツールと組み合わせてください。同一の入力は常に同一の出力を生むため、異なる大陸のチームでも共有状態なしに継続的インテグレーションで同じ期待値をアサートできます。この機能は何も保存しません。
点のリストはメモリ内で処理されて破棄され、計算された重心だけが返されます。
活用例
物理の宿題と採点
学生と教師が、ローカルのCASやスプレッドシートなしで1D・2D・3Dの点質量系の重心を確認できます。
つり合いとピボット配置
梁・板・モビール上の重み付き物体のつり合い点を求め、設計が最初から水平に吊れるようにします。
物理コード向け決定的フィクスチャ
加重平均をあちこちで再実装する代わりに、ゲームエンジンやシミュレーションのCIに既知の重心結果を固定します。
よくある質問
重心計算ツールはどんな式を使いますか?
軸ごとの質量加重平均です。重心の各座標は質量×位置の合計を総質量で割ったもので、x・y・zについて独立に計算されます。
2Dや3Dでも動作しますか?
はい。 必須なのはxだけです。任意の点にyやzを追加すれば、応答にはその次元の重心も含まれます。
重心計算ツールは無料ですか?
ブラウザツールはデバイス上で無料で動作します。無効な入力には課金されません。
質量は負の値でもよいですか?
はい、負の質量も受け付けます。穴やカウンターウェイトを表すときに便利です。ただし総質量が0になると重心が存在しないため、その場合は使えません。
重心と点の単純な平均はどう違いますか?
各位置を質量で重み付けするため、重い点ほど重心を引き寄せます。例では x の単純平均は2ですが、最も重い質量4が x 6 にあるので、重心は2.6666666667になります。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/math/center-of-mass \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"points":[{"mass":2,"x":0,"y":0},{"mass":4,"x":6,"y":0},{"mass":3,"x":0,"y":6}]}'const res = await fetch("https://api.kit.forhosting.com/math/center-of-mass", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"points": [
{
"mass": 2,
"x": 0,
"y": 0
},
{
"mass": 4,
"x": 6,
"y": 0
},
{
"mass": 3,
"x": 0,
"y": 6
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/math/center-of-mass",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"points": [
{
"mass": 2,
"x": 0,
"y": 0
},
{
"mass": 4,
"x": 6,
"y": 0
},
{
"mass": 3,
"x": 0,
"y": 6
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/math/center-of-mass", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"points":[{"mass":2,"x":0,"y":0},{"mass":4,"x":6,"y":0},{"mass":3,"x":0,"y":6}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"points":[{"mass":2,"x":0,"y":0},{"mass":4,"x":6,"y":0},{"mass":3,"x":0,"y":6}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/math/center-of-mass", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"points": [
{
"mass": 2,
"x": 0,
"y": 0
},
{
"mass": 4,
"x": 6,
"y": 0
},
{
"mass": 3,
"x": 0,
"y": 6
}
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.center_of_mass",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_points | 10000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
ブラウザツールはデバイス上で無料で動作し、プリペイドAPIは成功したリクエストごとに$0.002が課金されます。
入力仕様、バリデーション、使用する式
必須フィールドpointsが点質量ごとのオブジェクトの配列であるJSONオブジェクトを送信してください。エイリアスも使えます。 配列はmasses、bodies、particlesでもよく、質量はm、weight、wと書けます。ゼロの質量での除算には意味がないため、その入力はinvalid_inputと明確なメッセージで失敗し、バリデーション失敗に課金は発生しません。
APIの使い方、料金、実践的なワークフロー
宿題生成ツール、シミュレーションパイプライン、ロボティクススクリプト、テストスイートが同じ決定的な契約を必要とする場合はプリペイドAPIをご利用ください。KIT残高から成功したリクエストごとに$0.002が差し引かれ、バリデーションに失敗したリクエストは何も消費しません。応答はコンパクトな構造化JSONで、countは点数を、total_massは合計質量を示し、x・y・zが入力に存在する次元の重心座標を返します。
技術的な質問
点質量の重心はどう計算しますか?
pointsを{mass, x, y?, z?}オブジェクトの配列としたJSONを送信してください。応答はtotal_massと重心座標x(入力に存在すればy・zも)を返します。
総質量がゼロの場合はどうなりますか?
質量ゼロの系では重心が未定義のため、リクエストはinvalid_inputで失敗します。バリデーション失敗には課金されません。