Eu tenho três vértices (V1, V2, V3)
selecionados aleatoriamente em uma malha regular de triângulo. Para esses três vértices, calculei a distância geodésica e o caminho (usando Dijkstra) entre eles e formei uma superfície em forma de triângulo, como na figura acima.
Agora, eu tenho os vértices que estão em cada caminho e podem calcular distâncias geodésicas de um determinado vértice.
O que eu quero fazer é obter os vértices ou triângulos que estão na área do triângulo. Como posso fazer isso?
mesh
triangulation
mkocabas
fonte
fonte
Respostas:
Existe um método alternativo que se baseia no preenchimento de inundações. Primeiro, organize seus dados de borda em um loop, onde as bordas estão formando um loop no sentido anti-horário. Em seguida, comece em um ponto arbitrário no loop e escolha as arestas que se juntam a esse ponto. Use a aresta do limite de saída e cruze-a com a outra aresta de saída, se apontar na direção da face normal, será uma aresta a ser incluída, se não descartada. A partir dessa borda, continue até atingir uma borda limite; nesse ponto, você encerrará o preenchimento. Continue em um vértice da borda do limite ainda a ser visitado.
fonte
Eu já comentei sobre o uso do preenchimento de inundação e como seria melhor, pois é mais flexível, mas outra solução possível é a scanline. (Eu digo possível, porque ele faz muitas suposições sobre sua geometria, mas para o conjunto específico mostrado e muitos similares, ele funcionaria.)
Para o seu exemplo com 3 pontos: encontre o vértice de interseção do segmento v1, v2 e a linha em que v3 está. (O vértice no canto superior esquerdo da v2) Vamos chamar esse vértice v4.
Isso se chama scanline porque (na imagem acima) você desce as linhas vermelha e verde simultaneamente e depois as linhas vermelha e azul escaneiam simultaneamente as linhas à medida que avança.
Essa solução seria muito rápida se houver um padrão de índice, o que geralmente ocorre. Caso contrário, seria necessário um cálculo para determinar qual vértice vizinho está na linha.
O engraçado é o scanline, o teste bariátrico (na caixa delimitadora do triângulo) e o preenchimento de inundação são formas de desenhar triângulos na renderização em 3D.
fonte
Eu acho que você pode calcular algumas coordenadas barricêntricas ligadas à superfície para cada ponto na superfície e usá-las para verificar dentro ou fora do triângulo.
Eu não tenho um algoritmo exato em mãos, mas encontrei este documento a seguir, que parece lidar exatamente com esse tipo de coordenadas.
Coordenadas bariêntricas em superfícies
fonte