General formula to calculate Polyhedron volume

  1. Take the polygons and break them into triangles.
  2. Consider the tetrahedron formed by each triangle and an arbitrary point (the origin).
  3. Sum the signed volumes of these tetrahedra.

Notes:

  1. This will only work if you can keep a consistent CW or CCW order to the triangles as viewed from the outside.
  2. The signed volume of the tetrahedron is equal to 1/6 the determinant of the following matrix:

[ x1 x2 x3 x4 ]
[ y1 y2 y3 y4 ]
[ z1 z2 z3 z4 ]
[ 1 1 1 1 ]

where the columns are the homogeneous coordinates of the verticies (x,y,z,1).

It works even if the shape does not enclose the origin by subracting off that volume as well as adding it in, but that depends on having a consistent ordering.

If you can't preserve the order you can still find some way to break it into tetrahedrons and sum 1/6 absolute value of the determinant of each one.

Edit: I'd like to add that for triangle mesh where one vertex (say V4) of the tetrahedron is (0,0,0) the determinante of the 4x4 matrix can be simplified to the upper left 3x3 (expansion along the 0,0,0,1 column) and that can be simplified to Vol = V1xV2.V3 where "x" is cross product and "." is dot product. So compute that expression for every triangle, sum those volumes and divide by 6.


Similarly with a polygon where we can split it into triangles and sum the areas,
you could split a polyhedron into pyramids and sum their volumes. But I'm not sure how hard is to implement an algorithm for that.

(I believe there is a mathematical way/formula, like using vectors and matrices.
I suggest to post your question also on http://mathoverflow.net)

Tags:

Math