数学@ゲーム ポリゴンの面積を求める
ゲームの判定処理の基本、ポリゴン(多角形)の面積を求める方法です。
ゲームプログラムや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;
}
デモプログラム
この記事が役に立ったという方は、サポートお願いします。今後の製作の励みになります。