:Преобразование ненаправленной Graph в Заявлении Mesh
Я создаю программу, которая позволяет пользователям выкладывать свои собственные ненаправленный граф (узлы и ребра). Когда они нажимают определенную кнопку, я хочу создать триангулированную сетку из каждого «пробела» на графике. Вот два изображения, которые должны дать вам представление о том, что я после:
Есть несколько предостережений:
- Поскольку пользователи имеют полный контроль, я могу получить 3 , 4, 5 ... N односторонние пространства
- пользователь может создавать либо выпуклые или вогнутые формы
- применение делается в единстве с C#
Мои собственные попытки до этого момента были очень неэффективными и могут терпеть неудачу в очень необычных графических схемах. Мой общий план состоял в том, чтобы захватить один узел и пройти самый острый угол вокруг цикла, пока я не вернусь к первому узлу. Это работает частично, но я не знаю, получил ли я все пространство. Кроме того, я могу получить две идентичные ячейки, которые охватывают одно и то же пространство (хотя и с другим порядком узлов).
Буду признателен за любую помощь, которую вы можете дать мне с этим наездником. Чтобы помочь вам, я уже знаком с выпуклыми алгоритмами и триангуляцией корпуса.
Update:
Я не могу размещать код, потому что я под NDA для этого проекта, но структуры данных довольно просты.
Узлы имеют положение (вектор 3, но y всегда 0) и список связанных ребер.
Кромки имеют первый узел, второй узел и позицию (средняя точка).
Я хочу создать объект Mesh для каждого пробела. Этот сетчатый объект имеет статический массив вершин (вектор 3s) и статический массив треугольников (которые являются int и относятся к индексам вершин).
Покажите нам некоторый код с параметрами/структурами данных, которые вы проходите и ожидаете получить обратно. Неясно, как эти узлы + ребра и результирующая сетка должны быть представлены. для вашего кода/приложения. – RBarryYoung
См. Мое редактирование выше. – ADaurio
вот статья, которая охватывает многие из них со ссылкой на некоторый код JS: https://blog.reactoweb.com/2012/04/algorithm-101-finding-all-polygons-in-and-undirected-graph/Это интересный вопрос с большим количеством особых случаев (например, полигонов внутри других полигонов, возможно, несвязанных наборов кромок, различая многоугольники компонентов и «содержащие» полигоны, которые обертывают все точки). Поскольку у меня не будет времени на это работать, и я чувствую, что он не получил достаточного внимания, я собираюсь добавить щедрость. – RBarryYoung