InesskaПредставьте, что внутри Вашей объёмной фигуры находится некоторая точка

. Выберем один треугольничек сетки (назовём его

). Вместе с точкой

он образует тетраэдр

. Несложно вычислить объем тетраэдра, зная координаты точек

:

Если точка

внутри фигуры является началом координат, и координаты всех точек поверхности вычислены относительно неё (этого всегда несложно добиться, надеюсь, что понятно как), то объём тетраэдра найти ещё проще:

А объём всей фигуры будет равен сумме объёмов тетраэдров, соответствующих всем треугольникам сетки.
Я, конечно, предполагаю, что у Вас есть список всех треугольников сетки -- какой треугольник из каких точек составлен.

Но есть одна тонкость. Боюсь, нижеследующий текст будет сходу непросто воспринять. Точки

-- это вершины некоторого треугольника сетки. Но мы не можем просто взять вершины и назвать любую из них

, другую

, третью

. Мы должны всегда, давая им имена, обходить треугольник в определенном направлении. Мы должны дать имена вершинам так, чтобы глядя на треугольничек с внешней стороны, мы видели, что замкнутый путь

совершается
против часовой стрелки. И только тогда имеем право пользоваться приведенной формулой. Иначе надо как-то переназначить буквы (поменять местами обозначения двух вершин, например

и

).
Если это правило соблюдать, можно правильно вычислять объемы достаточно сложных фигур, не обязательно выпуклых. В некоторых ситуациях объем каких-то тетраэдров может по приведенной формуле получиться отрицательным, и это нормально. Так будет тогда, когда поверхность в некоторых местах изогнулась таким образом, что внешняя нормаль смотрит
на точку

, хотя обычно должна смотреть
от неё -- такое может быть при сложных формах. Если нужно, приведу поясняющий рисунок.
Второй подход более простой, но менее общий.
Если фигура не слишком сложная, и можно выбрать точку

так, что
фигура будет звёздной относительно

, тогда проще просто брать модуль от объёма каждого тетраэдра, то есть игнорировать знак. Но при таком подходе объём змеи

Вы уже не вычислите.