三角形内点判定
点(1, 1)は、頂点が(0, 0)、(4, 0)、(0, 3)で面積6の三角形の内部にあります。点と3つの頂点を入力するだけで内側か外側かが分かり、当たり判定やメッシュ、宿題の確認に使えます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- X
- 1
- Y
- 1
- X1
- 0
- Y1
- 0
- X2
- 4
- Y2
- 0
- 面積
- 6
平面上の点が三角形の内部にあるかどうかを判定することは、計算幾何学の基本的な操作です。宿題を確認する学習者、ヒットボックスを検査するゲームエンジン、三角形メッシュ上で標本を分類するGISツール、シードを検証するCADパイプラインはいずれも、手描きのスケッチではなく、高速で決定的な答えを必要とします。この三角形内点チェッカーはクエリ座標と三組の頂点を受け取り、符号付き部分三角形面積から重心座標の重みを構築し、内部(境界を含む)か外部かを報告します。非数値または欠落した座標も失敗し、課金されません。
三角形内点の意味と重心座標の重みによる判定
平面上の三角形は、共線でない三頂点 A、B、C の凸包です。クエリ点 P がこの三角形の内部にあるのは、三頂点の凸結合として書けるときです。すなわち P は a·A と b·B と c·C の和に等しく、a、b、c は非負で、a と b と c の和は一に等しい必要があります。
これらの重み a、b、c は ABC に関する P の重心座標です。代数的には、三つの部分三角形 PBC、PCA、PAB の符号付き面積と、ABC 自身の符号付き面積との比に等しくなります。任意の三点の符号付き面積の二倍は、おなじみの靴紐(shoelace)交差積なので、判定全体は少数の乗算と加算、および三角形面積による一回の除算で済みます。
三つの重みがすべて零以上であれば P は内部または境界上にあり、いずれかが厳密に負であれば P は反対側の辺の外側にあります。時計回りと反時計回りの頂点順はどちらも受理されます。符号付き面積は符号が反転することがありますが、重心比は一貫し、包含判定も変わりません。
この手法は垂直な辺で壊れる傾き比較を避け、多数の辺を持つ一般多角形向けに残した方がよいレイキャスティングの雑音も避けます。
入力契約、応答の形、エラー時の振る舞い
クエリ点の x と y、頂点 A の x1 と y1、頂点 B の x2 と y2、頂点 C の x3 と y3 です。三頂点が共線で符号付き面積の二倍の絶対値が零になる場合、線分に対する包含は三角形判定ではないため、ハンドラは退化三角形の明確なメッセージで要求を拒否します。
例として、頂点 (0,0)、(4,0)、(0,3) とクエリ (1,1) は、重心重みがすべて正で三角形面積が六のため inside true になります。同じ三角形でクエリ (5,5) は、少なくとも一つの重みが負のため inside false になります。スケッチが必要なら独自の描画と組み合わせてください。
本機能は包含の分類のみを行い、SVG、一般多角形向けの巻き数、数値欄を超える授業用の段階的散文は出力しません。
三角形内点チェッカーが役立つ場面
授業やチュータリングの基盤では、学習者が描画せず、垂直辺で失敗する傾き演算も使わずに宿題の三点組を確認できるよう、三角形内点チェッカーを使います。試験や LMS の自動採点は、内部と外部を一貫して採点し、境界点を内部として扱い、黙って false を返す代わりに共線の退化頂点を拒否する決定的なオラクルを必要とします。
ゲームやシミュレーションのコードは、単一の三角形のために完全な物理ミドルウェアを引き込まずに、三角の衝突プリミティブをプレイヤーや弾の標本に対してヒットテストします。GIS とメッシュ化のパイプラインは、属性を補間する前に、ドロネーや有限要素の三角形に対して標本点を分類します。検証失敗は課金されません。
要求を小さく保ち、丸めた重心重みと面積をテストに固定すれば、自前の幾何ライブラリを立てずに、宿題、エッジワーカー、CI 向けに再現可能な包含結果が得られます。一般の n 角形には兄弟の多角形包含ツールを使い、本ページは三角形固有の検索意図に応えます。
活用例
授業と宿題の確認
学習者にクエリ点と三頂点を送らせ、手描きのスケッチや壊れやすい傾き判定なしに点が三角形内かを確認させます。
試験と LMS の自動採点
共線の退化頂点を拒否し、境界点を内部として扱う決定的オラクルで、三角形内点の設問を採点します。
よくある質問
点が三角形の内部にあるかはどのように調べますか?
クエリに有限数 x,y を、三頂点に x1,y1,x2,y2,x3,y3 を送ってください。
三角形が退化している場合はどうなりますか?
線分に対する三角形内点は定義されず、その失敗は課金されません。
頂点の順序(時計回りと反時計回り)は重要ですか?
いいえ。 どちらの向きも機能します。符号付き面積は一緒に符号が反転するため、重心比と内部判定は一貫したままです。
辺や頂点の上にある点は内部と判定されますか?
はい。辺や頂点のちょうど上にある点は内部として扱われ、境界上にあることも示されます。閉じた三角形を扱う宿題の解答やメッシュ処理でよく使われる決まりです。
結果の3つの重みは何を表しますか?
各頂点に対応する点の重心座標で、合計は必ず1になります。3つとも0以上なら内部、どれかが負なら、その頂点の向かいの辺の外側に点があります。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/geom/point-in-triangle \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"x":1,"y":1,"x1":0,"y1":0,"x2":4,"y2":0,"x3":0,"y3":3}'const res = await fetch("https://api.kit.forhosting.com/geom/point-in-triangle", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"x": 1,
"y": 1,
"x1": 0,
"y1": 0,
"x2": 4,
"y2": 0,
"x3": 0,
"y3": 3
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geom/point-in-triangle",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"x": 1,
"y": 1,
"x1": 0,
"y1": 0,
"x2": 4,
"y2": 0,
"x3": 0,
"y3": 3
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geom/point-in-triangle", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"x":1,"y":1,"x1":0,"y1":0,"x2":4,"y2":0,"x3":0,"y3":3}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"x":1,"y":1,"x1":0,"y1":0,"x2":4,"y2":0,"x3":0,"y3":3}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geom/point-in-triangle", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"x": 1,
"y": 1,
"x1": 0,
"y1": 0,
"x2": 4,
"y2": 0,
"x3": 0,
"y3": 3
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geom.point_in_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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
頂点が共線である退化三角形は面積が零であり、空の推測ではなく invalid_input で失敗します。
三角形内点の意味と重心座標の重みによる判定
頂点または辺にちょうど載る点は零の重みを生み、メッシュ照会や宿題の解答で使われる閉三角形の慣例どおり、inside と on_boundary true として報告されます。
入力契約、応答の形、エラー時の振る舞い
必須の有限数八個を含む JSON 本体を POST してください。各欄は JSON 数値でも数値文字列でもよく、欠落、空文字、NaN、Infinity、非数値テキストは該当欄名付きの invalid_input で失敗し、残高は消費されません。
三角形内点チェッカーが役立つ場面
実装は純粋な parse の tier A であるため、成功した各呼び出しはモデルトークンも外向きネットワークもなく、公開の基本料金 $0.002 のみです。
連携の活用例
ゲーム・GIS・メッシュ照会
完全な幾何スタックの代わりに小さな parse API で、三角プリミティブのヒットテストやメッシュ面に対する標本分類を行います。
技術的な質問
辺上の点は内部として数えますか?
はい。境界点は重心重みが零となり、閉三角形の慣例どおり inside と on_boundary true として報告されます。
三角形内点チェッカーの料金は?
ブラウザツールは無料です。API 要求は成功した呼び出しごとに前払い KIT 残高から $0.002 で課金され、無効な入力は課金されません。