Encuentra la rotación x, y, z entre dos vectores normales
Frecuentes
Visto 7,727 veces
4
Tengo dos cuadrados en el espacio 3D. Quiero encontrar los ángulos x, y, z entre ellos. Empecé por encontrar los vectores normales para ambos cuadrados y estoy tratando de averiguar cómo obtener el ángulo entre ellos.
Estoy usando objetos XNA (C#) Vector3.
He calculado los vectores normales de la siguiente manera:
Vector3 normal1 = (Vector3.Cross(sq1.corners[0] - sq1.corners[1], sq1.corners[0] - sq1.corners[2]));
Vector3 normal2 = (Vector3.Cross(sq2.corners[0] - sq2.corners[1], sq2.corners[0] - sq2.corners[2]));
Quiero encontrar la rotación de Euler que se volverá normal1 mirando de la misma manera que normal2
1 Respuestas
9
Primero, puede calcular el eje y la cantidad de rotación (asumiendo un eje arbitrario):
Vector3 axis = Vector3.Cross(normal1, normal2);
axis.Normalize();
double angle = Math.Acos(Vector3.Dot(normal1, normal2) / normal1.Length() / normal2.Length());
Si las normales están normalizadas, entonces el cálculo del ángulo se reduce a
double angle = Math.Acos(Vector3.Dot(normal1, normal2));
Entonces puedes transformar esto en ángulos de Euler con la función de aquí
contestado el 22 de mayo de 12 a las 18:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c# math xna euler-angles or haz tu propia pregunta.
¿Es esta una pregunta de matemáticas o de programación? - L.B