Генерация поверхности сетки (триангуляция) из точных точек на поверхности трубы

Каковы рекомендуемые способы создания поверхностных сеток определенного типа тела с учетом следующего?

Геометрическое тело представляет собой экструдированный трехмерный «трубный» сегмент. Сегмент трубки обладает следующими свойствами:

  • При каждом значении Икс, поперечное сечение всегда является простым многоугольником в Y-Z, самолет
  • Полигоны не обязательно выпуклые
  • Полигоны не обязательно являются постоянными, так как Икс пройдено; они плавно расширяются и / или меняют форму, а площади многоугольников плавно меняются
  • Центроиды каждого X = const Многоугольник, если он соединен вместе с простыми отрезками, образует очень гладкую, хорошо себя зарекомендовавшую себя «нить» с максимально плавной кривизной, без резких изгибов, складок или петель и т. д.
  • Сечение поверхности ограничено плоскими поперечными сечениями в X = X_start а также X = X_end

Задача:

  • Создайте триангулированную сетку поверхности трубы, учитывая тот факт, что она в начале и в конце ограничена плоскими плоскими поверхностями поперечного сечения
  • Сетка должна быть из трубы, а не из выпуклой оболочки трубы
  • Если сетка поверхности трубы сохраняет свойство, что есть плоское простое многоугольное поперечное сечение, сформированное вершинами в X = X_start а также X = X_end, тогда у меня есть существующий код, который может мешать заглушки; настоящая проблема, которую я пытаюсь решить, — это создать сетку трехмерной поверхности трубы. Если решение также может генерировать заглушки, это тоже хорошо. Однако поверхности торцевой крышки должны быть идентифицируемыми как таковые для целей вывода.
  • После того, как сетка сгенерирована, ее необходимо записать в формате, подобном OFF, который, я думаю, я смогу обработать на основе кода, включенного в CGAL, примеров и т. Д. Суть в том, что мне не нужно больше обрабатывать сетка (например, деформации, добавить / удалить точки) программно после его создания.

Известные входные данные и свойства:

  • У меня есть многоугольные вершины поверхности трубы поперечного сечения при произвольном числе X = const станции между X_start а также X_end ; Я могу контролировать расстояние в Икс направление по мере необходимости, когда я создаю / импортирую точки
  • Вершины лежат точно на поверхности трубы и не искажаются никакими шумами, колебаниями, дискретизацией, приближениями и т. Д.
  • У меня нет никаких гарантий относительно относительного положения вершин, образующих каждый многоугольник поперечного сечения, кроме того, что вершины многоугольника ориентированы по часовой стрелке
  • Я могу генерировать нормали для полигональных вершин с точки зрения их Y-Z, компоненты, но у меня нет априорной информации об их нормальных компонентах в Икс направление
  • Я могу сгенерировать любое количество вершин на заглушках, если это необходимо
  • Прямо сейчас вершины являются трехмерными значениями координат с плавающей точкой, но если бы это могло как-то помочь, я мог бы превратить каждое поперечное сечение в формальное CGAL 2D расположение
  • Предполагаемое количество вершин, вероятно, будет меньше 1000, определенно меньше, чем, скажем, 15K. Время обработки не имеет значения.

Идеалы:

  • В идеале поверхностная сетка должна просто использовать имеющиеся у меня вершины, не вычитая и не перемещая ни одну из них, но это не является жестким ограничением, если они «близки»
  • Мне нужны простые полигональные вершины в X_start а также X_end так что я могу покрыть поверхности как задумано

Изначально CGAL Метод восстановления поверхности Пуассона казалось многообещающим, но, в конце концов, похоже, что это приводит к конвейеру обработки, который может размазать вершины, которые у меня есть; Кроме того, у меня нет полной трехмерной нормальной информации для точек, кроме заглавных букв. Более того, кажется, что метод имеет проблемы с острыми, четко выраженными поперечными поверхностями клемм. Может быть, я мог бы обойти последний, вставив кучу безобидных ложных вершин, чтобы расширить и завершить трубку, а затем отфильтровать части ненужной мне триангуляции, но нет никакой гарантии, что вершины в X_start а также X_end остался бы, и мне пришлось бы «исправить» триангуляцию, пересекающую эти плоскости, что кажется нетривиальным.

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

Я тоже видел этот ТАК вопрос Представление поверхности LiDAR с использованием 3D триангуляции Делоне в качестве основы? который, кажется, имеет некоторые сходства (пытаясь просто сохранить входные точки и некоторое предвидение свойств поверхности), но в конце я думаю, что мой вариант использования слишком отличается.

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]