三角形の面積(座標3点)計算ツール|シューレース公式・ヘロン公式・外積で即算出
座標平面上の3点(x1,y1)(x2,y2)(x3,y3)から三角形の面積を瞬時に計算。シューレース公式(座標法)・ヘロン公式・ベクトル外積の3方式に対応し、中学数学・高校数学の学習から、測量・GIS・CAD・グラフィックス・機械学習の点群処理まで幅広く活用できます。国土地理院・文部科学省の学習指導要領・JIS規格に沿って解説します。
三角形の面積 計算機(座標3点)
計算式と3方式の使い分け
基本式(シューレース公式)
S = |x1(y2 - y3) + x2(y3 - y1) + x3(y1 - y2)| ÷ 2
座標3点から三角形の面積を求める最速の方法がシューレース公式(Shoelace formula、靴ひも公式・座標法)です。3点の座標を代入するだけで面積が求まり、ヘロン公式のように平方根を含まないため、コンピュータ計算での誤差蓄積が起こりにくい利点があります。GIS・CAD・ゲームプログラミングでは事実上の標準です。
3方式の比較
| 方式 | 必要な入力 | 特徴 | 推奨用途 |
|---|---|---|---|
| シューレース公式 | 座標3点 | 平方根不要・高精度 | GIS・CAD・座標既知の場面 |
| ヘロン公式 | 3辺の長さ | 座標不要・古典的 | 測量野帳・実地測量 |
| 底辺×高さ÷2 | 底辺と高さ | 最も直感的 | 初等数学・図面計測 |
| ベクトル外積 | 2つの辺ベクトル | 3D空間にも拡張可 | 物理・グラフィックス |
| 行列式(サラス法) | 座標3点 | シューレースと等価 | 線形代数の理論 |
座標が既知ならシューレース公式、辺長のみ既知ならヘロン公式、3D空間なら外積と、入力条件に応じて選択します。本ツールは座標入力なのでシューレース公式を採用し、辺長・重心・向きも同時表示します。
シューレース公式(座標法)
シューレース公式は、座標を交差する形で掛け合わせる様子が靴ひもを結ぶ姿に似ていることから名付けられました。行列式で表現すると次の通りです。
S = ½ |det [[x2-x1, y2-y1], [x3-x1, y3-y1]]| = ½ |(x2-x1)(y3-y1) - (x3-x1)(y2-y1)|
導出(サラス法による行列式展開)
3点を頂点とする三角形は、原点を含む台形の面積を組み合わせて表現できます。順に頂点を並べた行列式:
S = ½ |x1(y2-y3) + x2(y3-y1) + x3(y1-y2)|
符号は頂点を並べる順番(時計回り/反時計回り)で反転します。絶対値を取れば面積、符号込みなら向き(有向面積)となり、CADでの表裏判定・多角形の内外判定(Point-in-Polygonアルゴリズム)に利用されます。
数値例(3-4-5 直角三角形)
P1(0,0), P2(4,0), P3(0,3) を代入:
S = ½ |0×(0-3) + 4×(3-0) + 0×(0-0)| = ½ |0 + 12 + 0| = 6
底辺4、高さ3の直角三角形の面積 = 6 と一致します。
ヘロン公式(3辺法)
3辺の長さa,b,cが分かる場合は、古代ギリシャの数学者ヘロンが示した公式が使えます。
s = (a+b+c)/2 (半周長)
S = √{ s(s-a)(s-b)(s-c) }
座標からの辺長算出
a = √{(x2-x3)² + (y2-y3)²}(P2-P3間距離)
b = √{(x1-x3)² + (y1-y3)²}(P1-P3間距離)
c = √{(x1-x2)² + (y1-y2)²}(P1-P2間距離)
座標から一度辺長を計算し、ヘロン公式に代入する二段構えは、測量現場で辺長のみを実測した場合の標準的な計算法です。国土地理院の三角測量・平面直角座標系による面積計算でも使われる伝統的な手法です。
ヘロン公式の数値不安定性
ヘロン公式は細長い三角形(針状三角形)で数値誤差が拡大する欠点があります。s-a などが極端に小さくなり、桁落ちを起こすためです。Kahanが提案した安定版:
S = ¼ √{(a+(b+c))(c-(a-b))(c+(a-b))(a+(b-c))}
を用いると精度が改善します。IEEE 754倍精度でも、細長三角形ではシューレース公式の方が安定です。
ベクトル外積による方法
頂点P1を基準に、辺ベクトルu = P2 - P1、v = P3 - P1を取ると、外積の大きさは平行四辺形の面積、その半分が三角形の面積になります。
S = ½ |u × v| = ½ |u_x·v_y - u_y·v_x|
3次元への拡張
3D: S = ½ |u × v| = ½ √{(u_y·v_z - u_z·v_y)² + (u_z·v_x - u_x·v_z)² + (u_x·v_y - u_y·v_x)²}
3D空間(例:z軸を含む地形の傾斜面)で三角形面積を出す場合、シューレース公式は直接使えず、外積が必須になります。GIS・地形解析・3D-CAD・有限要素法(FEM)のメッシュ生成で頻用されます。
計算例(直角・鋭角・鈍角)
例1: 3-4-5 直角三角形
P1(0,0), P2(4,0), P3(0,3)
シューレース:S = ½|0(0-3)+4(3-0)+0(0-0)| = 6
ヘロン:a=5, b=3, c=4, s=6, S=√{6·1·3·2}=√36=6 ✓
例2: 鋭角三角形
P1(0,0), P2(6,0), P3(3,5)
シューレース:S = ½|0(0-5)+6(5-0)+3(0-0)| = 15
底辺6・高さ5より 6×5÷2 = 15 ✓
例3: 鈍角三角形
P1(0,0), P2(8,0), P3(-2,4)
シューレース:S = ½|0(0-4)+8(4-0)+(-2)(0-0)| = 16
頂点P3が底辺の外側にあっても、絶対値を取れば正しい面積が出ます。
例4: 縮退三角形(3点一直線)
P1(0,0), P2(2,2), P3(4,4)
S = ½|0(2-4)+2(4-0)+4(0-2)| = ½|0+8-8| = 0
面積0となり、3点が同一直線上にあることが検出できます。CADで頂点重複・冗長エッジの除去に使えます。
拡張:多角形への一般化
シューレース公式はn角形(凸・凹どちらでも)に自然に拡張できます。
S = ½ |Σ(i=1..n) (x_i · y_{i+1} - x_{i+1} · y_i)| (P_{n+1} = P_1)
この一般化式は、GISで市区町村の面積計算、CADで閉じたポリゴンの面積、ゲームプログラミングで多角形コライダー、農業ドローンで圃場面積計算などに使われます。国土地理院の平面直角座標系(19系)を採用すれば、地図上の任意ポリゴンの面積が数式一発で求まります。
凹多角形・穴あきポリゴンへの対応
凹多角形でも符号込みで足し上げるだけで正しい面積になります。穴あきポリゴン(ドーナツ状)は、外側輪郭を反時計回り、内側輪郭を時計回りに与えて符号込みで合算すれば、外周から穴を差し引いた面積が得られます(OGC Simple Features仕様)。
実務での応用(測量・GIS・CAD)
測量・地籍調査
国土交通省・法務省の地籍調査、土地家屋調査士による測量で、三角形分割による面積計算に使用。平面直角座標系19系の座標から筆界面積を算出し、登記簿への反映に用いられます。国土地理院の座標成果は「シューレース公式」で計算されるのが標準。
GIS・地図解析
QGIS・ArcGIS・国土地理院地理院地図で、任意ポリゴンの面積計算は内部的にシューレース公式(またはその球面版)を使用。土地利用面積、森林面積、水田面積、災害浸水域の集計など、行政の統計基盤を支えます。
CAD・3D-CG・有限要素法
AutoCAD・Fusion360・SolidWorks等では、閉じたポリラインの面積、三角形メッシュの品質チェック(縮退三角形の検出)に使用。有限要素法(FEM)のプリプロセッサでは、要素面積が極端に小さい・負になる要素を検出し、メッシュ品質を保証します。
コンピュータグラフィックス
3Dグラフィックスの三角形描画(ラスタライズ)、バリスタ座標(barycentric coordinates)計算、視錐台カリング、レイキャスティングの三角形交差判定など、GPU・レンダリングエンジンの基盤演算。OpenGL・DirectX・Vulkan・Unityの内部で毎フレーム数億回実行されます。
ドローン・農業・林業
ドローンで撮影した空撮画像から圃場のポリゴンを抽出し、面積を算出することで施肥量・農薬散布量・収穫予測を最適化。農林水産省のスマート農業推進で活用が拡大しています。
機械学習・点群処理
ドロネー三角形分割、凸包(Convex Hull)計算、Point-in-Polygon 判定、Alpha Shapes による境界推定など、機械学習の前処理・データ工学で頻用。PythonのScipy・Shapely・OpenCVの内部でも使用されます。
アルゴリズム実装のポイント
浮動小数点誤差への対処
三角形面積計算では、大きな座標値と小さな差分の掛け算・引き算が発生し、桁落ちで有効数字が失われることがあります。実装時のベストプラクティスとして、次の点に留意します。
- 座標の平行移動:計算前に3点の重心を原点に移すことで、座標の絶対値を小さく保ち、桁落ちを防止できます。GIS・CADで大座標系(例:日本の平面直角座標系19系)を扱う際の基本テクニックです。
- Kahan summationの活用:多角形(100頂点以上)の面積計算では、Σ演算の誤差累積を抑えるため、Kahan補正和のアルゴリズムを使う実装もあります。
- 倍精度浮動小数点:C/C++の float(32bit)ではなく double(64bit)を推奨。JavaScript の Number は既定で64bit倍精度。
- 比較演算の許容誤差:「面積 = 0」の判定は厳密等号ではなく、abs(S) < eps(epsは 1e-9 程度)で判定するのが実務標準。
並列化・GPU実装
三角形メッシュ(数百万〜数億三角形)の面積計算は、CUDA・OpenCL・Metal によるGPU並列化で数十〜数百倍の高速化が可能。各三角形は独立して計算できるため、Embarrassingly Parallel な典型例で、レイトレーシング・地形解析・分子動力学シミュレーションの前処理として使われます。
ロバスト計算(丸め誤差のない厳密演算)
コンピュータ計算幾何学の分野では、Jonathan Shewchuk の「Adaptive Precision Floating-Point Arithmetic and Fast Robust Geometric Predicates」(1997)で提案された厳密述語(exact predicates)が知られています。座標が整数または有理数で与えられる場合、有限精度演算で常に正しい符号(+/−/0)を返すアルゴリズムで、CGAL(Computational Geometry Algorithms Library)などのライブラリで採用されています。
符号付き面積の応用
符号付き面積は、多角形の頂点の巡回向き(時計回り/反時計回り)判定に使えます。OGC Simple Features 仕様では、外側輪郭は反時計回り、内側輪郭(穴)は時計回りと定められています。CADで表裏を判定する際、面積が正なら「表向き」、負なら「裏向き」といった規約を持つ実装があります。
言語別の実装スニペット
- JavaScript:
const S = Math.abs((x2-x1)*(y3-y1) - (x3-x1)*(y2-y1)) / 2; - Python (numpy):
S = abs(np.cross(P2-P1, P3-P1)) / 2 - C++:
double S = std::abs((x2-x1)*(y3-y1) - (x3-x1)*(y2-y1)) / 2.0; - Excel:
=ABS((B2-B1)*(C3-C1) - (B3-B1)*(C2-C1))/2 - PostGIS:
ST_Area(ST_MakePolygon(ST_MakeLine(ARRAY[p1,p2,p3,p1])))
よくある間違い・注意点
- 絶対値を忘れる — 頂点を時計回りに並べると符号が負になります。絶対値を取らないと負の面積が出て、集計が崩れます。CADの向き判定に使う場合を除き、必ず絶対値を取りましょう。
- 1/2 を忘れる — シューレース公式の結果は「平行四辺形の面積」で、三角形はその半分。1/2で割り忘れると2倍の面積になります。
- 単位系の混在 — 座標がメートルなら面積は㎡、ミリメートルならmm²。km単位の座標を扱う場合は、㎡に変換するか結果を10^6倍する必要があります。地図系ではメートル、CADではミリが多いため、混在に注意。
- 3点が同一直線上 — 面積が0になります。CADのコリニア(共線)頂点、無効な三角形の検出には便利ですが、意図せず0が出た場合は入力ミス(座標のタイプミス)を疑います。
- ヘロン公式の桁落ち — 細長い三角形(辺の一つが極端に短い)でヘロン公式を使うと、精度が落ちます。座標が既知ならシューレース公式を使う方が安全です。
- 地球規模の面積(球面) — 数百km以上のスケールでは、地球が球面であることを無視した平面計算は誤差が大きくなります。国土地理院の平面直角座標系を使うか、球面三角法・測地線計算(Vincenty法・Karney法)を用います。
- 3次元座標を2次元公式に代入 — z座標を無視して2D計算すると、傾斜面の三角形は投影面積になり、実面積より小さくなります。3D空間では必ず外積を使用します。
関連する学習指導要領・規格
- 中学校学習指導要領(数学) ― 中学2年で三角形の合同・面積、中学3年で相似・三平方の定理を扱う。座標平面上の図形は中学3年〜高校数学Ⅱで扱う内容。
- 高等学校学習指導要領(数学Ⅱ) ― 座標平面上の直線・円、三角形の面積公式(座標法)が明示的に登場。ベクトル外積は数学C(旧数学B)で扱う。
- JIS Z 8210 ― 案内用図記号。地図記号の設計基礎に幾何計算が使われる。
- JIS X 7107 ― 地理情報 - 空間スキーマ。GIS における幾何演算の国際標準(ISO 19107 の JIS 版)。多角形面積計算の理論的基礎。
- OGC Simple Features Specification ― Open Geospatial Consortium の空間データ標準。ポリゴン面積計算の実装標準。
- 測量法(日本) ― 国土地理院の測量成果、平面直角座標系の使用が規定されている。三角形分割による面積計算が公共測量作業規程に記載。
参考文献・公的資料
より正確な計算根拠や実装事例は、以下の公的機関・学会の資料を参照してください。
- 国土地理院 ― 日本の測量・地図の公式機関。平面直角座標系、地理院タイル、電子基準点の座標データを公開。
- 文部科学省 学習指導要領 ― 中学校・高等学校の数学の指導内容の公式資料。
- 国土交通省 国土政策局 GIS ホームページ ― 政府の GIS 政策と技術資料。地理空間情報活用推進基本法の運用。
- 法務省 不動産登記制度 ― 土地の面積は登記の必須情報。測量成果と座標計算の法制度。
- 日本産業標準調査会(JISC) ― JIS 規格の公式索引。JIS X 7107 など地理情報の規格を検索・閲覧可能。
- OGC Simple Features Specification ― Open Geospatial Consortium。多角形面積計算の国際標準の一次資料。
- ISO 19107:2019 Geographic information - Spatial schema ― GIS の幾何計算の国際規格。
- Wolfram MathWorld: Triangle Area ― 数学百科事典。三角形面積公式の全一覧と証明。
- 日本数学会 ― 日本の数学研究の学術団体。
- 情報処理推進機構(IPA) ― 情報処理技術者試験、幾何計算アルゴリズムの参考書。
よくある質問(FAQ)
シューレース公式とヘロン公式、どちらを使うべき?
座標が既知ならシューレース公式が最速かつ高精度。ヘロン公式は座標を辺長に変換する手間があり、細長い三角形では数値誤差も出ます。辺長のみ実測している測量現場では、ヘロン公式が必然の選択になります。
3点が同一直線上のとき、面積はどうなる?
面積は0になります。シューレース公式でも0が出ます。逆に「3点が一直線上にあるかどうか」を判定する簡易チェックに使えます。CAD・GIS の縮退頂点検出、多角形の妥当性検証に有用です。
座標がマイナスでも計算できる?
できます。シューレース公式・ヘロン公式ともに、負座標・小数座標に対応。地図座標系(東経・北緯を平面直角座標系に変換した後)や、CAD の原点を任意位置に取った座標系でも問題なく動作します。
3D空間の三角形面積は?
3次元座標(x,y,z)の三角形は、ベクトル外積を使います。S = ½ |u × v| ここで u = P2 - P1、v = P3 - P1。傾斜面・地形面・3D-CADの三角形メッシュはこの式で正確な面積が出ます。zを無視した2D計算は投影面積になり、実面積より小さくなります。
「有向面積」とは?
シューレース公式で絶対値を取らないと符号付きの面積が出ます。頂点が反時計回りなら正、時計回りなら負。CADの表裏判定、Point-in-Polygon アルゴリズム、面法線の向き決定に使われる重要な概念です。
単位はどうなる?
座標の単位の2乗が面積の単位。座標がメートルなら㎡、ミリなら mm²、キロなら km²。地図系ではメートル、CAD ではミリが多いので、混同しないよう注意してください。
多角形(4角形・5角形…)にも使える?
シューレース公式は n 角形に自然に拡張できます。頂点を順に並べて Σ(x_i · y_{i+1} - x_{i+1} · y_i) / 2 を計算するだけ。凸・凹どちらでも動作し、GIS・CAD・ゲームエンジンでの標準アルゴリズムです。
地図で面積を出すときの注意点は?
数百km以上のスケールでは地球の球面性の影響が無視できません。国土地理院の平面直角座標系(19系)または UTM 座標系に投影して計算するのが標準。緯度経度(度単位)のまま平面計算すると大幅に誤差が出ます。
細長い三角形で誤差が出るのはなぜ?
ヘロン公式の s-a などが極端に小さくなり、浮動小数点演算で桁落ちします。座標が既知ならシューレース公式、辺長しかないなら Kahan の安定版ヘロン公式を使います。
重心の座標も出せる?
3頂点の座標の平均が重心:G = ((x1+x2+x3)/3, (y1+y2+y3)/3)。本ツールでも計算結果に表示しています。中線の交点(Centroid)で、三角形の内部にあります。
行列式との関係は?
シューレース公式は 2×2 行列式そのもの:S = ½ |det[[x2-x1, y2-y1],[x3-x1, y3-y1]]|。線形代数の観点では、平行四辺形の面積 = 行列式の絶対値、三角形はその半分です。3D では 3×3 行列式で四面体体積が同様に求まります。
プログラミングで実装する場合の注意は?
Python の場合、numpy を使うと `abs(np.cross(P2-P1, P3-P1))/2` の1行で書けます。C/C++/Java では 32bit float より 64bit double を使用。座標の差分を先に取ってから積を取ると、大座標系での桁落ちを軽減できます。