Trouver Signé Angle entre les vecteurs
-
23-09-2019 - |
Question
Comment voulez-vous trouver le angle thêta signé du vecteur a à b?
Et oui, je sais que thêta = arccos ((a.b) / (| a || b |)).
Toutefois, cela ne contient pas de signe (à savoir qu'elle ne fait pas la distinction entre une rotation dans le sens horaire ou anti-horaire).
Je besoin de quelque chose qui peut me dire l'angle minimum de rotation de a à b. Un signe positif indique une rotation de + x + axe vers l'axe y. A l'inverse, un signe négatif indique une rotation de + axe x vers l'axe -y.
assert angle((1,0),(0,1)) == pi/2.
assert angle((0,1),(1,0)) == -pi/2.
La solution
Si vous avez une fonction atan2 () dans votre bibliothèque mathématique de choix:
signed_angle = atan2(b.y,b.x) - atan2(a.y,a.x)
Autres conseils
Ce que vous voulez utiliser est souvent appelé le « produit scalaire PERP », à savoir, trouver le vecteur perpendiculaire à l'un des vecteurs, puis trouver le produit scalaire avec l'autre vecteur.
if(a.x*b.y - a.y*b.x < 0)
angle = -angle;
Vous pouvez également faire ceci:
angle = atan2( a.x*b.y - a.y*b.x, a.x*b.x + a.y*b.y );