Как создать триангулированную сетку из нескольких контурных линий - PullRequest
1 голос
/ 24 апреля 2019

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

Example contour lines

Я пытался использовать библиотеку Poly2Tri для триангуляции Делоне, ноэто не работает так хорошо, потому что работает только в 2d, и хотя я могу заставить его работать в 3d, оно не имеет дело с контурными линиями, которые располагаются вертикально (то есть: имеют одинаковые координаты, когда 3-е измерение отбрасывается)

Кто-нибудь знает, какой алгоритм лучше всего использовать, и в идеале - существующую библиотеку, которую я могу использовать из приложения ac #?

1 Ответ

1 голос
/ 27 апреля 2019

Вы можете продолжать использовать алгоритм 2D Делоне, но каждый раз делайте это между двумя соседними слоями (z1, z2). (z1

Предположим, что контурные линии выбираются и сохраняются в виде набора (x, y, z) в направлении против часовой стрелки на плоскости z. Вам необходимо построить набор точек границы / отверстия для триангуляции:

  • обнаружение или вычисление перекрывающихся отрезков (x1, y1, z1) (x2, y2, z1) и (x1, y1, z2) (x2, y2, z2)
  • сдвиньте (x1, y1, z1) внутрь с небольшим смещением вдоль направления средней нормали двух соседних отрезков. Аналогично, двигайтесь (x2, y2, z1) внутрь; переместить (x1, y1, z2) (x2, y2, z2) наружу. Теперь две (или более) линии контура разделены, и вы получите две (или более) точки границы / отверстия.
  • применить трангуляцию Делоне в пределах области, определяемой границей и отверстиями (то есть генерировать случайные точки, точки опускания вне границы или внутри отверстий, строить треугольник). Я предполагаю, что Poly2Tri будет обрабатывать случаи, когда треугольник частично закрывает отверстие. Получив все треугольники в плоскости (x, y), восстановите смещение и вычислите z, интерполируя исходные данные.

Снова выполните триангуляцию для слоя (z2, z3) и т. Д. Обратите внимание, что точки отверстия / границы в точке z2 остаются прежними, но если происходит перекрытие, вместо того, чтобы двигаться внутрь, теперь оно движется наружу. В конце объедините все треугольники в одну сетку.

...