3点で囲む三角形の面積(外積の活用)


3次元空間上の3点A,B,Cが与えられたとき、この3点で囲む三角形の面積を求めます。実はこれはベクトルの外積を使うと簡単に計算できます。

まずベクトルABとACを計算します。ベクトルの外積の大きさは外積の計算に用いた2つのベクトルを2辺にもつ平行四辺形の面積に等しいので、2つのベクトルAB,ACに囲まれる三角形の面積Sは外積の大きさの1/2となることから、
$$S=\frac{1}{2}|\vec{AB}\times\vec{AC}|$$
として計算できます。

内積が値(スカラー)であるのとは異なり外積はベクトルです。OpenCVではPoint3f型と、Vec3f型を使って、次のような関数を作ることができます。ノルムはベクトルの長さを計算しますが、Mat型しか引数に取れないためキャストします。

double area(Point3f a, Point3f b, Point3f c){
    Vec3f AB = b-a;
    Vec3f AC = c-a;
    return norm(Mat(AB.cross(AC)))/2.0;
}