ポリゴンから体積を求める

WebGL

3角ポリゴンの3点の座標が、 (x1,y1,z1) ,(x2,y2,z2),(x3,y3,z3)の場合

v = 1/6 * (y1z2 - z1y2) x3 + (z1x2 - x1z2)y3 + (x1y2 - y1x2)z3

を全ての3角形ポリゴンで計算して、和を求めればよい。

但し、 3角ポリゴンはソリッドでならなくてはならない。

以下は、javascriptのサンプルのコードである。volumeValue に体積が求まる。

var volumeValue = 0.0;
var vol = 0.0;
for (let i = 0; i < mesh.geometry.faces.length; i++) {
      //calc volume
      p1 = mesh.geometry.vertices[mesh.geometry.faces[i].a].clone();
      p2 = mesh.geometry.vertices[mesh.geometry.faces[i].b].clone();
      p3 = mesh.geometry.vertices[mesh.geometry.faces[i].c].clone();

      var v = (p1.y * p2.z  - p1.z * p2.y) * p3.x + (p1.z * p2.x - p1.x * p2.z) * p3.y
                + (p1.x * p2.y - p1.y * p2.x) * p3.z;
     vol = (1 / 6) * v;
      volumeValue = volumeValue + vol;
 }