三角形の重心
3つの頂点から三角形のつり合う点を求めます。(0, 0)、(6, 0)、(0, 9) の重心は (2, 3) で、x と y をそれぞれ単純に平均した値です。3本の中線が交わる点でもあります。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- X1
- 0
- Y1
- 0
- X2
- 6
- Y2
- 0
- X3
- 0
- Y3
- 9
- X
- 2
- Y
- 3
三角形の重心とは、3つの中線が交わる点であり、同時に三角形のつり合いの点でもあります。厚紙で形を切り抜いた場合、まさにそこに置いたピンの上で水平に保たれます。6つの数値をお送りいただくと、重心のxとyが返されます。結果は小数点以下6桁に丸められるため、どのマシンでも同一です。幾何学エンジンも近似も状態もありません。正確な公式を検証し、1回の呼び出しで実行するだけです。
重心とは実際には何か
すべての三角形には重心がちょうど1つあり、三角形がどれほど引き伸ばされ歪んでいても、常に図形の内側に位置します。幾何学的には、各頂点と対辺の中点を結ぶ3つの中線の交点であり、各中線を2対1の比に分け、頂点から対辺までの2倍の距離に位置します。
物理的には均一な三角形板の質量中心であり、だからこそ技術者は荷重を計算する際にこれを重視し、物理の教科書がこれを「つり合いの点」と呼ぶのです。三角形の重心について注目すべき点は、座標からの計算がいかに安価かということです。中線を作図する必要も、角度を測る必要も、方程式を解く必要もありません。
重心のx座標は3つの頂点のx座標の単純な平均であり、y座標は3つのy座標の平均です。6つの入力を検証し、各軸を合計し、3で割り、結果を小数点以下6桁に丸めて、お受け取りになるバイト列がランタイムやプラットフォーム間で安定するようにします。
呼び出し方と返ってくるもの
平均はどの頂点を最初にラベル付けするかを気にしません。各値は有限数でなければなりません。不正な幾何に費用は一切かかりません。
入力が有効な場合、応答はxとyの2つのキーを持つ単一のオブジェクトで、小数点以下6桁に丸められた重心の座標が入っています。丸めは意図的なものです。0.1 + 0.2 + 0.3のような浮動小数点の合計はJavaScriptエンジン間で最後のビットが異なることがあり、丸められていない結果は2台のマシンで異なる比較結果になる可能性があります。
小数点以下6桁は実用上の精度を完全に保ちながら、出力をバイト単位で安定させます。
三角形の重心が役立つ場面
三角形の領域の視覚的中心にラベルを配置する地図サービス、選択された面にカメラを中央に合わせるゲームエンジン、比較前に形状を正規化する幾何パイプライン、三角形の支持ポリゴンの上に把持点を計算するロボット工学ルーチンなどです。
いずれの場合も、価値があるのは算術ではなく、システムのすべてのコンポーネントが、5つのコードベースに貼り付けられた5つの乖離したコピーではなく、1つの共有実装によって計算された、同じ検証済みで同一に丸められた数値を使用するという保証です。保存も副作用もありません。座標が入り、重心が出て、後には何も残りません。
活用例
地図上の三角形の領域にラベルを付ける
三角形ゾーンの重心にテキストラベルを配置し、頂点がどれほど歪んでいても、図形の視覚的中心に表示されるようにします。
カメラやカーソルを面上に中央配置する
メッシュ内で選択された三角形の重心を計算し、1回の呼び出しでビューポートをそこに移動します。パイプラインのすべてのツールが見るのと同じ数値を使用します。
比較前に形状を正規化する
三角形の重心が原点に来るように平行移動し、回転とスケールの比較が図形が描かれた場所に依存しないようにします。
よくある質問
どの公式を使いますか?
重心は頂点の算術平均です。xは(x1 + x2 + x3) / 3に等しく、yは(y1 + y2 + y3) / 3に等しくなります。
頂点の順序は関係ありますか?
いいえ。 平均は交換可能なので、3つの頂点のどのようなラベル付けでも同じ重心が得られます。
なぜ結果は小数点以下6桁に丸められるのですか?
浮動小数点の合計が最後のビットで異なる可能性のあるJavaScriptランタイム間で、出力をバイト単位で安定させるためです。小数点以下6桁は実用上の精度を完全に保ちます。
重心が三角形の外に出ることはありますか?
ありません。どの三角形にも重心はちょうど1つあり、どれほど細長くゆがんだ形でも必ず内側にあります。そのため地図上のラベルを置く位置としても安心して使えます。
重心は中線をどんな比に分けますか?
2対1に分けます。どの中線上でも、重心から頂点までの距離は、重心から向かい合う辺の中点までの距離の2倍です。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/math/centroid-of-a-triangle \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"x1":0,"y1":0,"x2":6,"y2":0,"x3":0,"y3":9}'const res = await fetch("https://api.kit.forhosting.com/math/centroid-of-a-triangle", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"x1": 0,
"y1": 0,
"x2": 6,
"y2": 0,
"x3": 0,
"y3": 9
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/math/centroid-of-a-triangle",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"x1": 0,
"y1": 0,
"x2": 6,
"y2": 0,
"x3": 0,
"y3": 9
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/math/centroid-of-a-triangle", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"x1":0,"y1":0,"x2":6,"y2":0,"x3":0,"y3":9}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"x1":0,"y1":0,"x2":6,"y2":0,"x3":0,"y3":9}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/math/centroid-of-a-triangle", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"x1": 0,
"y1": 0,
"x2": 6,
"y2": 0,
"x3": 0,
"y3": 9
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.centroid_of_a_triangle",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
このエンドポイントは、3つの頂点の座標が与えられると、その点を3つのx座標と3つのy座標の算術平均として直接計算します。
重心とは実際には何か
このエンドポイントはその公式を文字通り適用します。
呼び出し方と返ってくるもの
リクエストにはx1からy3までの6つの必須フィールドがあり、3つの頂点それぞれにxとyが1つずつあり、順序は任意です。いずれかの座標が欠けている、文字列である、あるいはNaNやInfinityである場合、呼び出しは問題のフィールドを名指しするinvalid_inputエラーで失敗し、課金されません。
重心エンドポイントが報われる場面
公式を一度書くのは簡単ですが、このようなエンドポイントは、計算が多くの場所で同時に一貫して行われる必要がある場合にその価値を発揮します。
技術的な質問
費用はいくらですか?
1リクエストあたり$0.002です。このページのブラウザでの実行も無料です。ウィジェットはまったく同じコードを実行します。
座標が欠けているか無効な場合はどうなりますか?
リクエストはフィールドを名指しするinvalid_inputエラーで失敗し、請求されません。各座標は有限数でなければなりません。