2D点群の重心計算ツール
点の集まりの中心を、座標の平均で求めます。(0, 0)、(4, 0)、(0, 3) の重心は (1.3333333333, 1) です。配達先やセンサーの位置、土地の角などの中心を知りたいときに使えます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
処理はブラウザ内で完結します。ファイルは送信されません。無料でご利用いただけます。
重心計算ツールは、点の集合の幾何学的な中心、つまりすべてのx座標とすべてのy座標を平均して得られる平衡点を求めます。点のリストを送信すると、重心の座標と平均した点数が返ってきます。1点でも10万点でも動作し、サーバー側のファイルには一切触れません。
重心とは何か
平面上に点在する点の集まり——配送先、センサーの位置、土地の区画の角など——について、その真ん中はどこかと考えてみてください。重心はその素直な答えです。すべてのx座標を合計して点数で割り、y座標についても同じことを行います。
その結果は集合全体の釣り合いが取れる唯一の位置です。等しい重りを重さのない板に貼り付けたとすれば、ちょうど重心の位置に立てたピンの上で板は水平に静止します。この直感が重要なのは、その数値が何の役に立つかを示すからです。
重心は個々の点ではなく集合全体を代表します。1点を動かせば重心もその移動量のちょうどN分の1だけ動きます。既存の点の重複を追加すれば、重心はそちらへ引っ張られます。重心計算ツールはこの算術平均の公式をそのまま適用します。
重み付けも面積補正も順序への仮定もなく、すべての点が1回ずつ等しく数えられます。
計算の仕組み
各点はx座標とy座標を持つオブジェクトで、点数・平均された座標・使用したメソッドを返します。数値の文字列も受け付けて自動変換するため、フォームやCSVの列から直接データが来る場合に便利です。すべての座標は、十分に広い絶対値の範囲内の有限の数値でなければなりません。
空のリストは一律に拒否されます。0点の重心は定義されず、ゼロ除算はNaNを生じ、NaNを呼び出し元に返すことはバグが検出されないまま下流へ伝播する経路だからです。結果は小数点以下10桁に丸められ、同じ入力がどのマシンでもバイト単位で同一の出力を生むため、自動テストや監査記録がプラットフォームや時期を越えて安定します。
重心と他の「中心」の概念との違い
「中心」という言葉には複数の異なる考えが潜んでおり、誤ったものを選ぶとミスリードな答えになります。ここで計算する算術平均の重心は各点を等しい一票として扱います。これは点が観測値である場合——顧客の位置、標本採取地点、クリック位置——に適しています。
これは多角形の面積重み付き重心ではありません。そちらは図形の質量がどこにあるかを答えるもので、頂点の数ではなく囲まれた領域に依存します。そのためには別の多角形重心ケーパビリティがあります。
また、外れ値に強い中央値中心でも、点ごとに重要度が異なる重み付き質量中心でもありません。遠く離れた1点が平均を支配しているなら、平均がそれを反映しているというのが正直な結論です。その点がそもそも集合に含めるべきかを先に判断してください。
等しい重要度を持つ2D点集合に対して、算術平均の重心は標準的で最も安価かつ最も解釈しやすい要約であり、それがまさにこのケーパビリティが1回の決定的な呼び出しで返すものです。
活用例
顧客位置の中心を求める
配送先や来店客の座標を平均し、集合の釣り合い点に倉庫や待ち合わせ場所を配置します。
センサーや標本位置の要約
GPSサンプルや測定地点のバッチを1つの代表的な座標にまとめ、ダッシュボードやレポートに利用します。
キャンバスや注釈の中央配置
グラフィックスやマッピングツールで選択した点の平均を計算し、ラベル・マーカー・カメラフォーカスを配置します。
よくある質問
点のリストが空の場合はどうなりますか?
0点の重心は定義されないため、意味のない値を返す代わりに拒否されます。
点に重みは付きますか?
いいえ。 すべての点が1回ずつ等しく数えられます。これは座標の単純な算術平均であり、面積や質量で重み付けされた重心ではありません。
データは保存されますか?
いいえ。 座標はメモリ上で処理され破棄されます。返されるのは重心のみです。
多角形の重心と同じものですか?
いいえ。多角形の面積の重心は囲まれた領域で決まり、頂点の数には左右されません。このツールは点そのものを平均するので、顧客の所在地や調査地点、クリック位置のような観測点に向いています。
点を1つ動かすと重心はどう変わりますか?
その点の移動量のN分の1だけ、同じ向きに動きます。また、すでにある点と同じ点を追加すると、重心はその点のほうへ引き寄せられます。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/math/centroid \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"points":[{"x":0,"y":0},{"x":4,"y":0},{"x":0,"y":3}]}'const res = await fetch("https://api.kit.forhosting.com/math/centroid", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"points": [
{
"x": 0,
"y": 0
},
{
"x": 4,
"y": 0
},
{
"x": 0,
"y": 3
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/math/centroid",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"points": [
{
"x": 0,
"y": 0
},
{
"x": 4,
"y": 0
},
{
"x": 0,
"y": 3
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/math/centroid", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"points":[{"x":0,"y":0},{"x":4,"y":0},{"x":0,"y":3}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"points":[{"x":0,"y":0},{"x":4,"y":0},{"x":0,"y":3}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/math/centroid", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"points": [
{
"x": 0,
"y": 0
},
{
"x": 4,
"y": 0
},
{
"x": 0,
"y": 3
}
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.centroid",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_points | 100000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
有料APIを処理しているのとまったく同じコードがこのページ上で無料で動くため、ここで試した内容をそのまま後で自動化できます。
計算の仕組み
このエンドポイントは点のJSON配列を受け取ります。フィールドの欠落、非数値、範囲外の大きさは、平均を密かに壊すのではなく、問題のある点を特定する明確なエラーで即座に失敗します。
技術的な質問
料金はいくらですか?
リクエストごとに$0.002です。このページ上でブラウザから無料で実行することもできます。
どのような入力を受け付けますか?
pointsという名前のJSON配列で、各要素は数値のx座標とy座標を持つオブジェクトです。数値の文字列は自動的に変換されます。
点数に上限はありますか?
はい、1リクエストあたり100,000点までです。それより大きい集合はバッチごとに平均し、部分和の重み付き平均として結合してください。