Encontrar x,y,z e rotação entre dois vectores normais
-
13-12-2019 - |
Pergunta
Eu tenho duas casas no espaço 3D.Eu quero encontrar o x,y,z ângulos entre eles.Comecei por encontrar os vectores normais para ambas as praças, e eu estou tentando descobrir como obter o ângulo entre eles.
Eu estou usando XNA (C#) Vector3 objetos.
Eu ter calculado o normal vetores da seguinte forma:
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]));
Eu quero encontrar o euler de rotação que vai ficar normal1 diante da mesma forma como normal2
Solução
Primeiro, você pode calcular o eixo e a quantidade de rotação (partindo-se de um eixo arbitrário):
Vector3 axis = Vector3.Cross(normal1, normal2);
axis.Normalize();
double angle = Math.Acos(Vector3.Dot(normal1, normal2) / normal1.Length() / normal2.Length());
Se as normais são normalizados, em seguida, o cálculo do ângulo reduz a
double angle = Math.Acos(Vector3.Dot(normal1, normal2));
Em seguida, você pode transformar isso em ângulos de euler com a função de aqui
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow