見出し画像

数学@ゲーム ポリゴンの面積を求める

ゲームの判定処理の基本、ポリゴン(多角形)の面積を求める方法です。
ゲームプログラムや3DCGでは処理を単純化するために、すべて三角形に分割して計算することが多いです。
多角形を三角形に分割、それぞれの面積を足し合わせることで多角形の面積を求めます。

三角形の面積

外積で簡単に求まります。ベクトルの外積の長さは、2つのベクトルでできる平行四辺形の面積なので、2で割れば2つのベクトルでできる三角形の面積になります。3次元では、外積は三角形の法線になります。

外積で面積を求める

多角形を三角形に分割

プログラムをできるだけ簡単にしたいので、凹形凸形を調べて分割方法を変える分割はしません。基準点(配列[0]とか)を決めて、Triangle fanで三角形に分割します。

凸ポリゴンの場合

凹ポリゴンの場合、少しおかしなことになりますが、幾何学?を使えば、そんなことは気にせずに計算できます。外積で面積を求める場合、負の面積(三角形の向きが反対)を求めることができるので、そのまま足していけばOK!

凹ポリゴンの場合

プログラム

TypeScrip(JavaScript)です。

export function PolygonArea(v : Vector[]) : number[]{
    if(v.length < 3){
        return [0];
    }
    let ret : number[] = [0];
    for(let i=1;i<v.length-1;++i){
        let v0 = v[0];
        let v1 = v[i];
        let v2 = v[i+1];
        let v1_v0 = Vector.sub2(v1, v0);
        let v2_v0 = Vector.sub2(v2, v0);
        let a = Vector.cross2(v2_v0, v1_v0)/2;//三角形の面積
        ret[0] += a;
        ret.push(a);
    }
    return ret;
}

デモプログラム


この記事が役に立ったという方は、サポートお願いします。今後の製作の励みになります。