Вот, например, есть многогранник произвольной формы, например, модель скарабея из мехов, требуется вычислить объем. Допустим, модель не содержит "дырок", ну, то-есть ограничиваемый моделью объем замкнут, а так же пересечений треугольников не по ребрам.
Вопрос: как лучше всего это сделать? Мне на ум пришло два решения:
1)Выбрать произвольную точку рядом с многогранником или внутри него(а можно и одну из вершин многогранника), и подсчитать объем всех пирамид, образованных этой точкой и каждым треугольником модели, причем треугольники, обращенные нормалью от точки, будут добавляться со знаком "+", а нормалью к точке - со знаком "-". При заданных ограничениях должно получиться правильно.
2)Разбить пространство вокруг многогранника на сетку, подсчитать количество узлов, попавших внутрь него, и умножить на объемный шаг сетки.
Как мы видим, второй и первый способ не работает, если объем модели не замкнут, да и не должны, тащемта, работать, а вот если имеются пересечения треугольников, работать не будет первый, более четкий, способ, а второй вроде работает.
Есть ли лучше способы подсчитать объем? Или более стойкие к таким дефектам модели, как пересечение треугольников. Нет ли в указанных способах недостатков, или случаев неправильной работы, которые я не назвал?
Добавлено спустя 1 час 23 минуты 57 секунд:
Кроме того, вот, допустим, есть та же самая модель скарабея и некоторая заданная точка. Требуется найти ребро/грань/вершину модели, которая удовлетворяет некоторым условиям, зависящим от заданной точки, например, наименьшее или наибольшее расстояние.
Существуют ли алгоритмы, которые позволяют это сделать и более эффективные, чем полный перебор?
|