Trouver x, y, z rotation entre deux vecteurs normaux
-
13-12-2019 - |
Question
J'ai deux carrés dans l'espace 3D.Je veux trouver les angles X, Y, Z entre eux.J'ai commencé en trouvant les vecteurs normaux pour les deux carrés et j'essaie de comprendre comment obtenir l'angle entre eux.
J'utilise des objets Vector3 xna (C #).
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 d'Euler qui sera normale1 face à la même manière que la normale2
La solution
Premièrement, vous pouvez calculer l'axe et la quantité de rotation (en supposant 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, le calcul de l'angle diminue à
double angle = Math.Acos(Vector3.Dot(normal1, normal2));
Ensuite, vous pouvez le transformer en angles d'Euler avec la fonction de ici
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow