2012-05-22 15 views
3

J'ai deux carrés dans l'espace 3D. Je veux trouver les angles x, y, z entre eux. J'ai commencé par trouver les vecteurs normaux pour les deux carrés et j'essaie de comprendre comment obtenir l'angle entre eux. J'utilise XNA (C#) Vector3 objets.Trouver la rotation x, y, z entre deux vecteurs normaux

J'ai calculé les vecteurs normaux comme suit:

 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])); 

Je veux trouver la rotation euler qui se normale1 face à la même manière que Normal2

+4

Est-ce une question de mathématiques ou de programmation? –

Répondre

7

D'abord, vous pouvez calculer l'axe et le montant de rotation (dans l'hypothèse d'un axe arbitraire):

Vector3 axis = Vector3.Cross(normal1, normal2); 
axis.Normalize(); 
double angle = Math.Acos(Vector3.Dot(normal1, normal2)/normal1.Length()/normal2.Length()); 

Si les normales sont normalisées, alors le calcul de l'angle réduit à

double angle = Math.Acos(Vector3.Dot(normal1, normal2)); 

Ensuite, vous pouvez transformer ce à des angles euler avec la fonction de here

Questions connexes