Tengo 3 vértices (V1, V2, V3)
seleccionados al azar en una malla triangular regular. Para estos 3 vértices, he calculado la distancia geodésica y el camino (usando Dijkstra) entre ellos y he formado una superficie en forma de triángulo como en la figura anterior.
Ahora, tengo los vértices que se encuentran en cada ruta y puedo calcular distancias geodésicas desde un vértice dado.
Lo que quiero hacer es obtener los vértices o triángulos que se encuentran en un área triangular. ¿Cómo puedo hacer esto?
mesh
triangulation
mkocabas
fuente
fuente
Respuestas:
Existe un método alternativo que se basa en el llenado de inundaciones. Primero organice sus datos de borde en un bucle donde los bordes están formando un bucle en sentido antihorario. Luego comience en un punto arbitrario en el bucle y elija los bordes que unen ese punto. Use el borde del límite de salida y crúcelo con el otro borde de salida, si apunta en la dirección de la cara normal, entonces se debe incluir un borde, si no lo descarta. Desde este borde, continúe hasta llegar a un borde límite, en cuyo punto termina el relleno. Continúe en un vértice de borde límite aún por visitar.
fuente
Ya he comentado sobre el uso del relleno de inundación y cómo sería mejor ya que es más flexible, pero otra posible solución es scanline. (Digo posible porque hace muchos supuestos sobre su geometría, pero para el conjunto particular que se muestra y muchos similares funcionaría).
Para su ejemplo con 3 puntos: Encuentre el vértice de intersección del segmento v1, v2 y la línea en la que se encuentra v3. (El vértice en la esquina superior izquierda de v2) Llamaremos a este vértice v4.
Se llama scanline porque (en la imagen de arriba) vas por las líneas rojas y verdes simultáneamente y luego las líneas rojas y azules simultáneamente escanean las líneas a medida que avanzas.
Esta solución sería muy rápida si hay un patrón de índice, que suele ser el caso. De lo contrario, se necesitaría un cálculo para determinar qué vértice vecino se encuentra en la línea.
Lo curioso es el scanline, las pruebas barcéntricas (en el cuadro delimitador de triángulos) y el relleno de inundación son todas formas de dibujar triángulos en renderizado 3D.
fuente
Creo que puede calcular algunas coordenadas barcéntricas unidas a la superficie para cada punto de la superficie y luego usarlas para verificar el interior o el exterior del triángulo.
No tengo un algoritmo exacto a mano, pero encontré el siguiente documento que parece manejar exactamente este tipo de coordenadas.
Coordenadas baricéntricas en superficies
fuente