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.
Était-ce utile?

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 );
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top