Tengo 2 triángulos y vértices p0, p1, p2, p3. Estos dos triángulos comparten una ventaja. De estos dos triángulos quiero hacer un tetraedro dado por los 4 vértices. La biblioteca con la que trabajo requiere que "los 4 vértices se den de manera tal que los cuatro vértices triples que definen las caras del tetraedro en el dibujo aparezcan en el sentido contrario a las agujas del reloj cuando se ven desde el exterior" . Suponiendo que uno de los dos triángulos es p0, p1, p2, calculo lo normal como siendo (p1-p0) (cruzado) (p2-p0). ¿Puede alguien decirme una forma de garantizar que se cumpla esta condición?Orientación del tetraedro para mallas triangulares
Respuesta
respuesta corta:
La condición es que p3
debe estar en el lado correcto de la plano determinado por (p0, p1, p2)
.
Así, después de calcular la normal para este plano, es necesario determinar si el vector de (digamos) p0
a p3
está apuntando en la misma dirección de la normal, o la dirección opuesta, tomando el producto punto dot(normal, p3-p0)
.
Más matemáticamente hablando:
es necesario encontrar el determinante de la matriz de 4x4 formado por las coordenadas homogéneas de los cuatro puntos. El signo del determinante determina si se cumple la condición; el signo apropiado depende de las convenciones exactos utilizados, pero lo ideal es que debe ser positivo:
require:
0 < det(p0, p1, p2, p3)
== det [ p0.x p0.y p0.z 1 ]
[ p1.x p1.y p1.z 1 ]
[ p2.x p2.y p2.z 1 ]
[ p3.x p3.y p3.z 1 ]
Si un determinado conjunto ordenado de puntos tiene un determinante negativo, se puede solucionar mediante el canje de dos cualquiera de los puntos (que se negar el determinante):
e.g., swapping p0 and p2:
det(p0, p1, p2, p3) = - det(p2, p1, p0, p3)
^ ^ ^ ^
o, más generalmente, el cambio entre even and odd permutations de los cuatro vértices.
Si el determinante es cero, los cuatro puntos son coplanarios y no se pueden arreglar así.
Finalmente, el código:
una forma relativamente sencilla para calcular este determinante con 3-d vector matemáticas:
let: v1 = p1 - p0
v2 = p2 - p0
v3 = p3 - p0
norm12 = cross(v1, v2)
-> determinant = dot(norm12, v3)
El determinante final también se conoce como el "producto triple" de v1, v2 y v3.
Tenga en cuenta que he dudado en intentar decodificar la convención de signos exacta (es decir, si necesita que el determinante sea positivo o negativo) de su pregunta: la redacción y el diagrama que proporciona son más que confusos.
Ya que tiene la biblioteca original y su documentación, está en la mejor posición para responder esta pregunta. Como último recurso, puede probar el método empírico: pruebe ambos signos y elija el que no explote ...
Muchas gracias por la respuesta aclaratoria. Funcionó a las mil maravillas – Ray
- 1. geometría computacional, tetraedro firmó volumen
- 2. notación Big O para números triangulares?
- 3. cómo alinear dos mallas
- 4. Generando coordenadas triangulares/hexagonales (xyz)
- 5. Encuentra todos los puntos con coordenadas enteras dentro del tetraedro
- 6. OpenGL ES 2.0 múltiples mallas? (solo ejemplos del mundo real)
- 7. OpenGL: Problema con bandas triangulares para malla 3d y normales
- 8. orientación del dispositivo iPhone
- 9. Detección de colisiones triangulares en espacio 2D
- 10. Cálculo de coordenadas UV planas para mallas arbitrarias
- 11. ¿Múltiples mallas en un buffer de vértice?
- 12. Orientación horizontal para UITabBarController?
- 13. ¿Cómo obtener la orientación actual de la vista del iPhone o la última orientación del dispositivo?
- 14. Cómo cambiar la orientación del video para AVCaptureVideoDataOutput
- 15. la orientación del videobrush no coincide con la orientación del teléfono
- 16. Ambigüedades de cubo de marcha versus Tetraedro de marcha
- 17. listado todas las secciones interesantes de un tetraedro
- 18. Desactivar orientación pero detectar orientación
- 19. brújula del iphone girando según la orientación
- 20. Orientación horizontal en el control del repetidor
- 21. orientación del iPad devuelve valores desconocidos
- 22. Android 2.3 cambios de orientación del emulador
- 23. ¿Cómo cambiar la orientación del control UniformGrid?
- 24. orientación actual del dispositivo iphone en ViewDidLoad
- 25. ¿Cómo generar las ventanas triangulares del algoritmo MFCC y cómo usarlas?
- 26. Servlets de mallas múltiples en un solo web.xml
- 27. Orientación de la orientación de retorno del teléfono durante la captura de imágenes
- 28. Determinación de la orientación de la pantalla en lugar de la orientación del dispositivo
- 29. ¿Cómo conseguir la orientación del teléfono Android que coincida con la orientación humana?
- 30. Soporte de hardware de prueba en Javascript para eventos de orientación del dispositivo del iPhone 3GS
Es una pena que haya tomado la molestia de proporcionar un diagrama muy claro y luego haya utilizado las etiquetas equivocadas para los vértices en el texto de su pregunta. La primera vez que lo leí estaba muy confundido. –
En general, necesitaría otra forma de decidir en el exterior: a menudo esto proviene del algoritmo de mallado (cubos de marcha, etc.) –
Si ambos triángulos tienen las normales calculadas de la misma forma que se menciona en la descripción, ¿no podría simplemente elegir un lado? (el que está apuntando lo normal) y lo consideran de frente o detrás? – Ray