Создать открытую сетку поверхности из набора трехмерных точек - PullRequest
0 голосов
/ 28 февраля 2019

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

Все найденные ссылки касаются (иногда?) Закрытых поверхностей, например, CGAL.Смотрите примеры ниже.Кроме того, некоторые алгоритмы CGAL требуют ориентированных нормалей в каждой точке, которых у меня нет.

Есть ли для этого доступные алгоритм и код?(либо CGAL Advancing_front_surface_reconstruction, правильно обработанная, либо любая другая)

См. также this и this .


Пример 1

Я скомпилировал и запустил пример reconstruction_surface_mesh.cpp из examples/Advancing_front_surface_reconstruction, из коробки (который использует файл half.xyz в качестве входных данных для точек данных)и я получил закрытую поверхность:

enter image description here enter image description here

Я хотел бы избавиться от нескольких треугольников, которые закрываютсяповерхность.Я попытался добавить дополнительную точку в конце half.xyz, и я получил

enter image description here enter image description here

, который являетсяоткрытая поверхность.Пока что с тем, что я тестировал, я не знаю:

  1. Как обозначить открытую поверхность.

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

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


Пример 2

Я скомпилировал и запустил пример boundaries.cpp, готовый к работе (который также использует файл half.xyz как вход для точек данных).Выходные данные:

0 outliers:

Boundaries:
boundary
0.178269 0.438589 0.129521
0.0795598 0.419465 0.244812
0.0549683 0.377617 0.3119
-0.0295721 0.360972 0.329075
-0.111332 0.334417 0.342617
-0.186667 0.2953 0.346683
-0.2719 0.16555 0.375017
-0.336304 0.117058 0.339323
-0.393517 0.0775 0.285917
-0.421419 -0.126854 0.215271
-0.395217 -0.214417 0.20015
-0.354783 -0.2953 0.170767
-0.237067 -0.395867 0.172233
-0.178246 -0.438588 0.129553
0.0227767 -0.4873 0.0700833
0.220338 -0.438589 -7.23321e-06
0.293 -0.395867 0
0.36025 -0.334417 0
0.418077 -0.258382 6.0303e-05
0.46025 -0.17265 0
0.484417 -0.0425167 -0.0763333
0.485067 0.03875 -0.0782667
0.471547 0.117058 -0.076827
0.44605 0.197567 -0.0700833
0.4092 0.27125 -0.0433167
0.364885 0.329645 0
0.313633 0.377617 0.0441167
0.2509 0.41425 0.0879333

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

Более того, кажется, что выводбыть списком граничных точек, без «ложных» треугольников (я не уверен).Я хотел бы уточнить этот список.

1 Ответ

0 голосов
/ 28 февраля 2019

Алгоритм реконструкции фронта CGAL генерирует открытые поверхности в целом.

...