Comment calculer l'angle entre deux vecteurs de direction qui forme un ouvert/fermé de forme?
J'essaie de trouver le bon trig. eq./fonction pour déterminer les éléments suivants:
Le Angle (en DEGRÉS) entre deux VECTEURS de DIRECTION(déjà déterminé), qui représentent les deux line-segment.
Il est utilisé dans le contexte de la FORME RECOGTNITION (dessiné à la main par l'utilisateur sur l'écran).
DONC, fondamentalement,
a) si l'utilisateur tire une (grossière) de la forme, comme un cercle ou un ovale ou un rectangle, etc - les lignes qui rend cette forme sont divisées en à dire.. 20 points(x-y paires).
b) j'ai le DirectionVector pour chacun de ces SEGMENTS de LIGNE.
c) de Sorte que le DÉBUT d'un SEGMENT de LIGNE(x0,y0), les points de FIN de la ligne précédente(de manière à former une forme fermée comme un rectangle, disons).
DONC, ma question est , étant donné le contexte(c'est à dire determinign le type d'un polygone), comment trouver l'angle de changement entre les deux VECTEURS de DIRECTION(disponible en deux valeurs à virgule flottante pour les x et les y) ???
J'ai vu tellement de différents trig. les équations et je suis à la recherche de clarté sur ce point.
Merci beaucoup à l'avance les gens!
OriginalL'auteur ImmortalBuddha | 2010-11-28
Vous devez vous connecter pour publier un commentaire.
Si (x1,y1) est le premier vecteur de direction et (x2,y2) est le second, il est titulaire d':
cos( alpha ) = (x1 * x2 + y1 * y2) /( sqrt(x1*x1 + y1*y1) * sqrt(x2*x2 + y2*y2) )
sqrt moyen de la racine carrée.
Rechercher http://en.wikipedia.org/wiki/Dot_product
En particulier la section "Représentation Géométrique".
Une toute petite chose: Depuis que vous êtes nouveau ici: Vous peut-vote des réponses, et vous pouvez également sélectionner un pour le "accepté" des réponses. Cela soulève la "réputation" de la personne qui a répondu, donc c'est une belle chose à faire 🙂
Ouais.. j'ai juste réalisé que... et allais dire "être gentil avec moi" comme je ne suis pas vraiment quelqu'un qui passe beaucoup de temps en ligne en général, et afin de ne pas " faire des forums qui, souvent, comme la plupart de vous ne. Je vais donner le votre, le vote pour l'instant. Une fois que j'ai de mettre en œuvre la solution que je vais choisir la "bonne" réponse. 🙂 MERCI beaucoup! 🙂
Salut, une question de plus Largebaer.. :0 Vous avez attribué le résultat du calcul de cos() fonction. Ce n' "alpha"? Si je devais écrire du code C++, savez-vous comment le lhs(à gauche sera représenté)?
Prendre l'arc-cosinus des deux côtés de l'équation, puis alpha = acos( (x1*x2 + y1*y2)/bla bla bla). Alpha sera l'angle que vous recherchez (et sera probablement dans les unités de radians).
OriginalL'auteur Lagerbaer
Vous pouvez essayer de atan2:
mais aussi, comme les réponses précédentes mentionné, la
angle entre deux verctors = acos(en premier.dotProduct(seconde))
Mise à JOUR pour tous: je ne reçois pas le bon angle pour toute combinaison de données(lignes), en utilisant l'une des méthodes ci-dessus. Je pensais que .. peut-être est-ce mon DirectionVector fonctions de calcul qui sont défectueux, mais ils semblent corrects, compte tenu de l'lignes que je dessine et la valeur ssupplied... j'ai Donc besoin d'ot regarder dans cette. Va garder ce blog posté, jusqu'à ce que le problème est résolu. Merci à tous ceux qui ont contribué jusqu'à présent. ~IB~
OriginalL'auteur George Profenza
Je suppose que vous avez le vecteur tel que de trois points (x_1, y_1), (x_2, y_2) et (x_3, y_3).
Ensuite, vous pouvez déplacer les points de sorte que (x_1, y_1) == (0, 0) par
(x_1, y_1) = (x_2, y_2) - (x_1, y_1)
(x_2, y_2) = (x_3, y_3) - (x_1, y_1)
Vous avez maintenant cette situation:
Pense de ce triangle en deux triangles rectangles. Le premier a l'angle alpha et une partie de la bêta, le deuxième triangle rectangle a l'autre partie de la bêta.
Vous pouvez ensuite appliquer:
Vous pouvez calculer alpha comme ceci:
OriginalL'auteur Martin Thoma
Si je vous comprends bien, vous pouvez simplement évaluer la produit scalaire entre deux vecteurs, et de prendre les mesures appropriées de arccos pour récupérer l'angle entre ces vecteurs.
OriginalL'auteur Hey-hou