Creo que este enfoque es el más sencillo para los cuadriláteros 3D planos y convexos:
![enter image description here]()
Suponga que tiene cuatro puntos (A,B,C,D) y que quieres comprobar si AC es realmente una diagonal del cuadrilátero. Si lo es, los ángulos ∠CAB y ∠CAD tendrán diferentes orientaciones (en el sentido de las agujas del reloj).
Esto significa que los vectores →c1 y →c2 definidos como productos cruzados:
→c1=→AC×→AB
→c2=→AC×→AD
...serán ambas perpendiculares al plano del cuadrilátero ABCD pero con direcciones opuestas . Esto significa que su producto escalar debe ser negativo:
s=→c1⋅→c2<0
El algoritmo es el siguiente:
→AC=(xC−yA)→i+(yC−yA)→j+(zC−zA)→k=p1→i+q1→j+r1→k
→AB=(xB−xA)→i+(yB−yA)→j+(zB−zA)→k=p2→i+q2→j+r2→k
→AD=(xD−xA)→i+(yD−yA)→j+(zD−zA)→k=p3→i+q3→j+r3→k
→c1=→AC×→AB=(q1r2−q2r1)→i+(r1p2−r2p1)→j+(p1q2−q2p1)→k=c1x→i+c1y→j+c1z→k
→c2=→AC×→AD=(q1r3−q3r1)→i+(r1p3−r3p1)→j+(p1q3−q3p1)→k=c2x→i+c2y→j+c2z→k
s=→c1⋅→c2=c1xc2x+c1yc2y+c1zc2z
Si s<0 , AC es una diagonal del cuadrilátero.
Si no es así, debe intentarlo sólo una vez más, intercambiando los lugares por C y B (o C y D ). Si vuelves a fallar, AD (o AB ) tiene que ser una diagonal (no es necesario comprobarlo).
EDITAR: El método puede transformarse en código de software con bastante facilidad. Todos los cálculos son sencillos y no demasiado costosos. Y sólo hay una condición "si" en el camino.
0 votos
¿Está garantizado que su cuadrilátero sea convexo ?
0 votos
Sí, el cuadrilátero será convexo.
0 votos
¿También es planar?
0 votos
Sí, los cuadriláteros serán todos planos, no sesgados.
0 votos
Encuentra las áreas de los cuatro triángulos posibles. En una combinación si la suma de los triángulos ABC,BCD es igual a la de BAD,ADC entonces BC,AD son las diagonales necesarias. Si no, prueba con otra combinación.