Encuentra la rotación x, y, z entre dos vectores normales

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

preguntado el 22 de mayo de 12 a las 18:05

¿Es esta una pregunta de matemáticas o de programación? -

1 Respuestas

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 or haz tu propia pregunta.