前回、3点からなる三角形の面積を外積を用いて求めました。
これを多角形へ応用したいと思います。
まず、外積のおさらいから。
Z成分が0(ゼロ)の2つのベクトル
の外積は
となり、Z成分の大きさが2つのベクトルのなす平行四辺形の面積となり、三角形の面積はこの半分(1/2)となります。
さらに、ベクトルa から ベクトルb への向きが反時計方向の場合、
ベクトルa と ベクトルb の外積のZ成分の値は正となり、
逆に時計方向の場合、Z成分は負となります。
これを踏まえて、3点からなる三角形の面積を求めるの時は三角形の辺上にベクトルを取りましたが、今回は原点と多角形の頂点の座標とで成すベクトルとします。
ここで、多角形の頂点の座標をP1~P3のように反時計方向に定義します。
ただし、Z座標は0(ゼロ)とします。
ベクトルP0→P1 と ベクトルP0→P2 の外積のZ成分の値は時計方向なので、負となります。
同様に、ベクトルP0→P2 と ベクトルP0→P3 の外積のZ成分の値は反時計方向なので、正となります。
ベクトルP0→P3 と ベクトルP0→P1 の外積のZ成分の値も反時計方向なので、正となります。
これらの外積の結果のZ成分を足して1/2にすると、求めたい三角形P1P2P3の面積が求まります。
この事をn点からなる多角形へ応用すると、下図のような図形の場合、
点P1~P3までは時計方向となるので、外積のZ成分は負となります。
点P3~P7、P1までは反時計方向となるので、外積のZ成分は正となります。
これら全ての外積のZ成分を足し、1/2にすると多角形の面積が求まります。
この事を一般式で書くと、頂点の座標をPi (xi, yi) とすると
となります。
i は i = 1, 2, 3・・・nのインデックス番号、
| | は絶対値です。
ただし、i = n のとき、n+1 = 1 とします。
また、絶対値を取っているのは、頂点の座標が時計方向へ割り振られた場合にも対応できるようにしています。