Расчет объема 3д модели

Нужно посчитать объем 3д модели сохраненной в файле формата STL, VRML и т.д.
Не подскажете может существуют какие то готовые библиотеки для работы с 3д объектами. (язык программирования не принципиален)
Или же просто куда копать.
З.Ы. Нужна именно библиотека (алгоритм), посчитать в MathLab'е не подойдет!

1 ответов


Для тех полигонов, которые обращены к точке (пусть будет O), объём тетраэдра, постоеного из O и вершин полигона прибавляете, а тех, что обращены в обратную сторону - вычитаете.

Вот формула из википедии: http://upload.wikimedia.org/math/3/a/9/3a979857ebc9898ecd6d830f976f1a53.png
Насколько я помню, обычно ориентация полигона задана порядком точек.
В этом случае даже не надо писать условие. В одном случае результат определителя будет положительным, в другом - отритцательным (так как задавая обратный порядок точек вы делаете нечётное количесво перестановок строк - одну :) )
Надо только в конце не забыть взять модуль :)

Этот способ будет быстрее, чем триангуляция - сложность прямо пропорциональна числу полигонов.
В триангуляции - как минимум n log n от числа точек.


Как я понимаю, надо разбить фигуру на несколько тетраэдров (этакая 3d-триангуляция) и посчитать их объём
Встретил в сети похожий вопрос (без ответа): http://forum.dwg.ru/showthread.php?t=38369
Может даст вам направление для поиска.


Можно разбивать не на тетраэдры, а вообще на пирамиды. Берем какую-то точку в середине объекта и прокладываем от нее отрезки к каждой вершине. Таким образом мы разбиваем любой объект на пирамиды, а объем пирамиды равен S*h/3. S - это площадь каждой грани (ее легко посчитать зная координаты всех вершин объекта), h вычисляется, зная координаты точки и координаты вершин грани, как нормаль к этой грани.

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


Если тетраидизация кажется слишком сложной, то есть решение брутфорсом. Создаешь пространственную матрицу из точек и считает количество точек внутри объекта.


Есть готовое решение ONLINE http://www.3dprintspb.com/?page_id=1852 там загружаешь модель и она считает....