Объединить смежные и копланарные грани - PullRequest
1 голос
/ 14 марта 2019

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

Ввод: Input Ожидаемый результат: Expected output

Ответы [ 2 ]

2 голосов
/ 18 марта 2019

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

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

0 голосов
/ 15 марта 2019

Каждое ребро определяется двумя точками, и поскольку все грани являются треугольниками, каждое ребро является общим для двух смежных треугольников. Если вы примете во внимание эти 2 треугольника, у вас будет всего 4 точки: две конечности края (общие для обоих треугольников) и две конечности 2 треугольников.

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

Чтобы проверить, являются ли 4 точки копланарными:

  • возьмите 3 точки из 4 и вычислите уравнение плоскости, определенной этими тремя точками (уравнение плоскости имеет вид ax + by + cz + d = 0).

  • проверить, удовлетворяет ли четвертая точка уравнению плоскости.

...