Calculer l'angle de direction à partir de deux vecteurs?
Dire que j'ai deux vecteurs 2D, un pour les objets de la position actuelle et l'autre pour que les objets de la position précédente. Comment puis-je travaille la direction angulaire de voyage?
Cette image pourrait aider à comprendre ce que je suis après:
(image) http://files.me.com/james.ingham/crcvmy
source d'informationauteur ingh.am
Vous devez vous connecter pour publier un commentaire.
Le vecteur de direction du voyage sera la différence de deux vecteurs position,
Maintenant, lorsque vous demandez de l'angle de direction, qui dépend de la direction que vous voulez mesurer l'angle contre. Est-il contraire à l'axe des x? Aller avec Radu réponse. À l'encontre d'un vecteur arbitraire? Voir justjeff de réponse.
Edit: Pour obtenir l'angle à l'encontre de l'axe des y:
la tangente de l'angle est le rapport de la coordonnée x du vecteur de différence à la coordonnée du vecteur de différence.
Donc
Où arctan signifie inverse de la tangente. À ne pas confondre avec l'inverse de la tangente, qui beaucoup de gens le font, car ils sont à la fois souvent notée tan^-1. Et assurez-vous de savoir si vous travaillez en degrés ou en radians.
Si vous êtes en C (ou autre langue qui utilise la même fonction), alors vous êtes probablement à la recherche pour le
atan2()
fonction. À partir de votre schéma:Que l'angle sera à partir de l'axe vertical, comme vous l'avez marqué, et sera mesurée dans radians (Dieu de son propre angle de l'unité).
Veillez à utiliser atan2 pour éviter quadrant questions et de division par zéro. Qu'est ce que ça existe.
Toutefois, si vous ne vous souciez pas de savoir si c'est un +ou -ve angle, il suffit d'utiliser le produit scalaire de la règle (moins de charge CPU):
Note que, dans chaque section de code ci-dessus, si l'un ( ou les deux ) les vecteurs sont proches de 0 longueur c'est voué à l'échec. De sorte que vous pouvez piège que d'une certaine façon.
Pas encore sûr de ce que tu veux dire par la rotation des matrices, mais c'est un cas simple d'obtenir un azimut à partir d'un vecteur de direction.
La complexité de la réponse:
Normalement, vous devriez prendre un peu de conversion/fonctions de l'utilitaire avec votre 2D vecteurs: l'un pour convertir,de X, Y (carthesian) à Theta,R (coordonnées polaires). Vous devez également appuyer le vecteur des opérations comme l'addition, la soustraction et de produit scalaire.
Votre réponse serait dans ce cas:
Où ToPolarCoordinate() et ToCarhtesianCoordinate() sont deux réciproque des fonctions de commutation à partir d'un type de vecteur à l'autre.
Le simple: