Как извлечь 2D-срез из 3D-геометрии из пересечения плоскости?
Недавно перед нашей командой стояла задача построить 2D-срез между плоскостью и некоторым набором 3D-геометрии (набор треугольников). Google оказался не таким полезным, как нам хотелось бы, поэтому мы обратим наше внимание, чтобы выяснить, сталкивался ли кто-нибудь с этой проблемой с возможным решением. Ссылки тоже нужны.
Поиск точек пересечения сам по себе не является сложной задачей, но обеспечение правильной генерации треугольников с правильной композицией углов играет с нами сложную игру. Нам просто не хватает математики / понимания того, как строится треугольник из модели arbirtrary.
Если у вас есть проблемы с пониманием того, что мы пытаемся сделать, представьте такой сценарий:
В программу загружена модель кролика. Затем "лазер" путешествует по космосу, разрезая кролика пополам. Этот тонкий срез, вырезанный лазером, является срезом, который мы хотим создать. Это должен быть набор 2D треугольников. Если лазер не разрезает его для вас (каламбур не предназначен), подумайте о ноже, самолете, обо всем, что рассекает что-то по плоскости.
Заранее спасибо.
3 ответа
Если вы не привязаны к какому-либо конкретному программному обеспечению, откройте свой набор данных в ParaView (paraview.org) или ParaViewGeo (paraviewgeo.mirarco.org).
Оба имеют фильтр Slice, который точно соответствует тому, о чем вы говорите, и оба позволяют сохранять данные обратно.
ParaViewGeo поддерживает форматы данных (GoCad, DataMine и другие), обычно используемые в индустрии разведки / добычи полезных ископаемых / геологии, и это единственное реальное различие между этими двумя частями программного обеспечения.
Есть также много других фильтров, доступных в этих пакетах программного обеспечения, которые могут вас заинтересовать, такие как Clip (разрезать кролика пополам и просмотреть одну из половинок) и Threshold (скажем, вы присвоили значения частям вашего кролика, например, идентификатор региона как уши, нос, глаза, ступни и т. д. вы можете "порог", чтобы только те части остались для просмотра)
Я действительно не знаю, что вы подразумеваете под "угловой композицией", но я полагаю, что это означает, что треугольники получаются не слишком острыми.
Я полагаю также, что ваша проблема может быть затем абстрагирована от триангуляции контура?
Если так, я уверен, что вы можете найти множество методов в сети.
Один метод, который я бы попробовал, был бы:
- заполните свой контур точками. Плотность ваших точек должна отражать плотность точек на вашем контуре. Еще лучше, плотность должна уменьшаться, когда вы уходите от центра.
- триангуляция с использованием триангуляции Делоне ( QHull обеспечивает эффективную реализацию)
Что касается первого пункта, алгоритм метания дротиков должен выполнить свою задачу с переменной плотностью, чтобы оптимизировать второй шаг. Это означает: вы бросаете "дротики", чтобы найти свои очки, но если дротик оказывается слишком близко от соседа, вы удаляете его и бросаете новый.
Пересечение плоскости и треугольника - это отрезок или ничего (игнорируя вырожденный случай, когда треугольник находится точно в плоскости).
Таким образом, результатом сканирования / разрезания лазером / ножом поперек треугольников модели кролика является набор отрезков. Я не уверен, как / почему вы ожидаете получить "2D треугольник" в результате.
Если вы хотите взять (возможно, не выпуклый) многоугольник (и), образованный этими отрезками линии, и "заполнить их" треугольниками, инструменты многоугольника CGAL могут сделать эту работу (я предполагаю, что пара изображений на этой странице - это нечто как то, что вы пытаетесь достичь).