Maison > développement back-end > C++ > Comment calculer directement les angles dans le sens des aiguilles d'une montre entre deux vecteurs ?

Comment calculer directement les angles dans le sens des aiguilles d'une montre entre deux vecteurs ?

Mary-Kate Olsen
Libérer: 2024-11-14 16:19:02
original
330 Les gens l'ont consulté

How do you calculate clockwise angles between two vectors directly?

Calcul direct des angles dans le sens des aiguilles d'une montre

Le calcul de l'angle dans le sens des aiguilles d'une montre entre deux vecteurs est souvent effectué à l'aide du produit scalaire, qui détermine l'angle intérieur (0 -180 degrés). Cependant, si vous préférez une méthode directe, voici les étapes à considérer :

Cas 2D

Tout comme le produit scalaire mesure le cosinus de l'angle, le déterminant fournit le sinus de l’angle. L'angle dans le sens des aiguilles d'une montre peut être calculé comme :

dot = x1*x2 + y1*y2  # Dot product between [x1, y1] and [x2, y2]
det = x1*y2 - y1*x2  # Determinant
angle = atan2(det, dot)  # atan2(y, x) or atan2(sin, cos)
Copier après la connexion

L'orientation de l'angle s'aligne sur le système de coordonnées, avec des signes positifs indiquant les angles dans le sens des aiguilles d'une montre. L'échange des entrées modifie l'orientation et donc le signe.

Cas 3D

Pour les vecteurs 3D, les deux vecteurs définissent un axe de rotation perpendiculaire aux deux. Puisque cet axe n’a pas d’orientation fixe, la direction de l’angle de rotation ne peut pas être déterminée de manière unique. Une convention courante consiste à orienter l'axe pour produire des angles positifs. Dans ce scénario, le produit scalaire des vecteurs normalisés suffit :

dot = x1*x2 + y1*y2 + z1*z2  # Between [x1, y1, z1] and [x2, y2, z2]
lenSq1 = x1*x1 + y1*y1 + z1*z1
lenSq2 = x2*x2 + y2*y2 + z2*z2
angle = acos(dot/sqrt(lenSq1 * lenSq2))
Copier après la connexion

Plans en 3D

Si les vecteurs se trouvent dans un plan avec un vecteur normal connu n, leur axe de rotation se situe selon n. Adapter le calcul 2D tout en incorporant n fournit l'angle dans le sens des aiguilles d'une montre :

dot = x1*x2 + y1*y2 + z1*z2
det = x1*y2*zn + x2*yn*z1 + xn*y1*z2 - z1*y2*xn - z2*yn*x1 - zn*y1*x2
angle = atan2(det, dot)
Copier après la connexion

Assurez-vous que n est normalisé pour ce calcul.

Plage de 0 à 360 degrés

De nombreuses implémentations d'Atan2 renvoient des angles dans la plage [-180°, 180°]. Pour obtenir des angles positifs dans la plage [0°, 360°], ajoutez 2π à tout résultat négatif.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal