Как извлечь 2D-срез из 3D-геометрии из пересечения плоскости? - PullRequest
2 голосов
/ 16 октября 2008

Недавно перед нашей командой стояла задача построить 2D-срез между плоскостью и некоторым набором 3D-геометрии (набором треугольников). Google оказался не таким полезным, как нам хотелось бы, поэтому мы обратим наше внимание здесь, чтобы узнать, сталкивался ли кто-нибудь с этой проблемой с возможным решением. Ссылки тоже нужны.

Поиск точек пересечения само по себе не является сложной задачей, но обеспечение правильной генерации треугольников с правильной композицией углов играет в сложную игру с нами. Нам просто не хватает математики / понимания того, как строится треугольник из модели arbirtrary.

Если у вас есть проблемы с пониманием того, что мы пытаемся сделать, представьте себе такой сценарий:

В программу загружена модель кролика. Затем «лазер» путешествует по космосу, разрезая кролика пополам. Этот тонкий срез, вырезанный лазером, является срезом, который мы хотим создать. Это должен быть набор 2D треугольников. Если лазер не порезал его для вас (каламбур не предназначен), подумайте о ноже, самолете, обо всем, что рассекает что-то по плоскости.

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 13 декабря 2008

Если вы не привязаны к какому-либо конкретному программному обеспечению, откройте ваш набор данных в ParaView (paraview.org) или ParaViewGeo (paraviewgeo.mirarco.org).

Оба имеют фильтр Slice, который точно соответствует тому, о чем вы говорите, и оба позволяют сохранять данные обратно.

ParaViewGeo поддерживает форматы данных (GoCad, DataMine и другие), обычно используемые в индустрии разведки / добычи полезных ископаемых / геологии, и это единственное реальное различие между этими двумя частями программного обеспечения.

Есть также много других фильтров, доступных в этих пакетах программ, которые могут вас заинтересовать, такие как Clip (разрезать кролика пополам и просмотреть одну из половинок) и Threshold (скажем, вы присвоили значения частям вашего кролика, например, Идентификатор региона похож на уши, нос, глаза, ноги и т. д. Вы можете «порог», чтобы только те части оставались для просмотра)

1 голос
/ 16 октября 2008

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

Полагаю также, что ваша проблема может быть затем сведена к триангуляции контура?

Если это так, я уверен, что вы можете найти множество методов в сети.

Один метод, который я бы попробовал, был бы:

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

Что касается первой точки, алгоритм метания дротиков должен добиться цели с переменной плотностью для оптимизации второго шага. Это означает: вы бросаете «дротики», чтобы найти свои очки, но если дротик оказывается слишком близко от соседа, вы удаляете его и бросаете новый.

0 голосов
/ 16 октября 2008

Пересечение плоскости и треугольника - это отрезок или ничего (игнорируя вырожденный случай, когда треугольник находится точно в плоскости).

Таким образом, результат сканирования / разрезания лазером / ножом поперек треугольников модели кролика представляет собой набор отрезков. Я не уверен, как / почему вы ожидаете получить «2D треугольник» в результате.

Если вы хотите взять (возможно, невыпуклый) многоугольник (и), образованный этими отрезками линии, и «заполнить их» треугольниками, Инструменты многоугольника CGAL могут выполнить эту работу (я думаю пара картинок на этой странице - что-то вроде того, чего вы пытаетесь достичь).

...