У меня есть 3 вершины, (V1, V2, V3)
случайно выбранные на сетке правильного треугольника. Для этих 3 вершин я вычислил геодезическое расстояние и путь (используя Дейкстру) между ними и сформировал треугольную поверхность, как на рисунке выше.
Теперь у меня есть вершины, которые лежат в каждом пути и могут вычислять геодезические расстояния от данной вершины.
То, что я хочу сделать, это получить вершины или треугольники, которые лежат в треугольной области. Как я могу это сделать?
mesh
triangulation
mkocabas
источник
источник
Ответы:
Существует альтернативный метод, основанный на заливке. Сначала разместите данные ребер в петле, где ребра образуют петлю против часовой стрелки. Затем начните с произвольной точки цикла и выберите ребра, соединяющие эту точку. Используйте край исходящей границы и пересекайте его с другим исходящим краем, если он указывает в направлении нормали грани, то этот край должен быть включен, если не отменен. От этого края продолжайте, пока не дойдете до граничного края, и в этот момент вы заканчиваете заливку. Продолжить в еще не посещенной граничной вершине.
источник
Я уже прокомментировал использование заливки и как она будет лучше, поскольку она более гибкая, но еще одно возможное решение - сканлайн. (Я говорю «возможно», потому что он делает много предположений о вашей геометрии, но для конкретного показанного набора и многих похожих будет работать.)
Для вашего примера с 3 точками: найдите вершину пересечения отрезка v1, v2 и линии, на которой лежит v3. (Вершина в верхнем левом углу v2) Мы назовем эту вершину v4.
Это называется scanline, потому что (на изображении выше) вы идете вниз по красной и зеленой линиям одновременно, а затем по красной и синей линиям одновременно сканируете линии.
Это решение будет очень быстрым, если есть шаблон индекса, что часто имеет место. В противном случае потребуется вычисление, чтобы определить, какая соседняя вершина лежит на прямой.
Забавно, что отсканирование, барицентрическое тестирование (в ограничивающей рамке треугольника) и заливка заливкой - все это способы рисования треугольников в 3D-рендеринге.
источник
Я думаю, что вы можете вычислить некоторые связанные с поверхностью барицентрические координаты для каждой точки на поверхности, а затем использовать их для проверки внутри или снаружи треугольника.
У меня нет точного алгоритма под рукой, но я нашел следующую статью, которая, кажется, обрабатывает именно такие координаты.
Барицентрические координаты на поверхностях
источник