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

Foi útil?

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
scroll top