Как разбить многогранник на тетраэдры с помощью TetGen?

Необходимо у многогранников находить объем. Один из способов это сделать, разбить многогранник на тетраэдры, желательно чтобы число тетраэдров было наименьшим, а, соответственно, размер каждого тетраэдра максимальным. В данной теме я абсолютный новичок, прочитал, что тетраэдрическую сетку можно построить с помощью библиотеки С++ TetGen. Она простая в использовании, как 3 рубля, и нужно дергать одну единственную функцию tetrahedralize(). Но у меня серьезный затык в понимании основ:

1) Правильно ли я понимаю, что тетраэдрическая сетка многогранника и разбиение многогранника на тетраэдры это одно и то же?
2) Что такое facets и segments многогранника? Из примеров вроде бы понял, что одно из них это грань, а второе нужно для обозначения вырезов, пазов и прочего.

Теперь вопросы по самой библиотеке TetGen, может кто-то её использовал:

1) Как получить набор этих самых тетраэдров после разбиения фигуры? Был бы очень благодарен простому примеру, например, на кубике. Т.е. задать вершины я могу, но опять возникает затык с заданием facets и segments и извлеканием тетраэдров после вызова tetrahedralize().
2) Библиотека принимает много критериев оптимальности разбиения на тетраэдры. Как мне указать нужный мне - тетраэдры максимального объема\размера (или другими словами, минимальное число тетраэдров)?

Большое спасибо.
  • Вопрос задан
  • 970 просмотров
Пригласить эксперта
Ответы на вопрос 1
@exaw
Решение задачи зависит от типа ваших многогранников - выпуклые или нет, с плоскими гранями или нет, насколько точный объем нужен.

Разбиение многогранника на тетраэдры действительно дает возможность вычисления объема многогранника через вычисление определителей.
Только если грани многогранника не плоские, точно описать тетраэдрами многогранник уже не получится и будет иметь место ошибка приближения и, возможно, фокусы с усреднением по нескольким видам разбиения.

Если вам нужен объем, думаю, не важно, много или мало тетраэдров у вас в итоге получится.

Для разбиения на тетраэдры для вычисления объема многогранника не стоит использовать генераторы типа TetGen или NetGen и подобные. Эти библиотеки решают задачу построения сетки, годной для расчетов, или для дальнейшего построения более сложных расчетных сеток, т.е. являются инструментами решения более сложных задач.

Скорее полезным будет посмотреть в сторону алгоритмов и библиотек вычислительной геометрии - CGAL, например.

Ради интереса можно поиграться с пакетом Salome, там можно строить геометрию и сетки, в том числе тетраэдральные, там же в кодах есть алгоритмы разбиения многогранников на тетраэдры, но не помню, есть ли там общий случай.

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

Войдите, чтобы написать ответ

Похожие вопросы