12
votes

Calculer l'angle de direction de deux vecteurs?

Dites que j'ai deux vecteurs 2D, un pour une position actuelle d'objets et un pour cet objet position précédente. Comment puis-je élaborer la direction angulaire du voyage?

Cette image pourrait aider à comprendre ce que je suis après:

(image) http://files.me.com/james.ingham/crcvmy < / a>


5 commentaires

Pouvez-vous expliquer un peu plus? Est-ce dans un espace 2D ou 3D, pouvez-vous donner un exemple de code et que ressemblent vos matrices? Ces matrices stockent-elles des données de rotation (il devrait probablement être un quaternion alors) ou décrivent-ils des transformations?


en.wikipedia.org/wiki/slope_formula ?


Merci Ross, je tente actuellement de mettre les réponses dans la pratique. Je vous ferai savoir comment je mets dans une seconde ...


L'image est maintenant cassée, rendant les réponses moins intelligibles. :(


Je vais passer par mes sauvegardes et le trouver.


4 Réponses :


2
votes

Vous ne savez toujours pas ce que vous entendez par des matrices de rotation, mais c'est un cas simple d'obtenir un azimut d'un vecteur de direction.

La réponse compliquée:

normalement Vous devez emballer quelques fonctions de conversion / utilitaire avec vos vecteurs 2D: un à convertir de X, Y (Carthésien) en Theta, R (coordonnées polaires). Vous devez également prendre en charge des opérations de base vectorielles telles que l'ajout, la soustraction et le produit DOT. Votre réponse dans ce cas serait la suivante: xxx

où topolaires () et toparhtesiencoordinate () sont deux fonctions réciproques passant d'un type de vecteur à un autre.

le simple: xxx


0 commentaires

10
votes

Le vecteur de la direction du voyage sera la différence des deux vecteurs de position, xxx pré>

maintenant, lorsque vous demandez l'angle de la direction, cela dépend de la direction que vous souhaitez mesurer l'angle. Est-ce contre l'axe X? Allez avec la réponse de RADU. Contre un vecteur arbitraire? Voir la réponse de Jusjeff. P>

Edit: Pour obtenir l'angle par rapport à l'axe Y: P>

theta = arctan[(x1 - x)/(y1 - y)]


5 commentaires

En fait, il est contre l'axe des y je cherche


@ James.ingham: J'espère que cela aide.


@James arctan a des problèmes à certains angles (c'est-à-dire s'il y a une fracture par zéro). C'est pourquoi il y a ATAN2 qui traite correctement les cas difficiles.


Cela est vrai, cependant exécuté, l'ATAN2 de mon code prouve trop pour l'appareil et provoque beaucoup de comportement lent. Je dois vous remercier car cela est pour ma thèse et je dois parler de différentes méthodes de faire des choses!


Quelle est la différence entre arctan et tangente inverse? mathwords.com/t/tangent_inver.htm dit qu'ils sont les mêmes (comme je pensais ils étaient)...



9
votes

Si vous êtes en C (ou une autre langue utilisant la même fonction définie), vous recherchez probablement la fonction ATAN2 () . De votre diagramme: xxx

Cet angle sera de l'axe vertical, comme vous l'avez marqué et sera mesuré dans les radians (unité d'angle de Dieu).


0 commentaires

5
votes

Soyez prudent d'utiliser Atan2 pour éviter les problèmes de quadrant et la division à zéro. C'est ce que c'est là pour. XXX

Toutefois, si vous ne vous souciez pas de savoir s'il s'agit d'un angle de + ve ou de -ve, utilisez simplement la règle du produit DOT (sans charge de la CPU): xxx

Notez que dans la section Code ci-dessus, si un (ou les deux) vecteurs est proche de 0 longueur, cela va échouer. Donc, vous voudrez peut-être piéger cela en quelque sorte.


0 commentaires