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

Était-ce utile?

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