Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1529 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  calcul d'un angle entre 2 vecteurs en c++ (en respectant le signe)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

calcul d'un angle entre 2 vecteurs en c++ (en respectant le signe)

n°1550236
hamoudasaf​ira1
Posté le 26-04-2007 à 19:18:31  profilanswer
 

Bonjour à tous  :hello:  
 
j'ai un petit problème de calcul de l'angle entre les 2 vecteurs, sachant que je sais comment le faire mais la maniére que je fais, le calcul de l'angle j'aurai toujours un angle positive, et c'est là le problème, puisque l'angle pourra être positive ou bien négative!!!
Je fais le calucul du produit scalaire de 2 vecteur AB et AC, pour avoir le cosinus entre ces vecteurs et puis je fais acos(cos(BÂC))!!!! Mais avec cette méthode j'ai une résultat toujours positive, vous pouvez me proposer une autre méthode pour avoir le signe réel de l'angle BÂC????? Merci  :sarcastic:  
 
P.S. : il y aussi une autre méthode aussi pour le faire calculer c'est de calculer l'angle entre le vecteur AB et l'horizontal(Alpha), puis la même chose pour le vecteur AC(Beta). Donc, l'angle entre les deux sera BÂC=Alpha-Betta!!!! Mais comment l'appliquer en c++????
 
Je vous remercie. :jap:

mood
Publicité
Posté le 26-04-2007 à 19:18:31  profilanswer
 

n°1550238
franceso
Posté le 26-04-2007 à 19:21:43  profilanswer
 

pour connaitre le vrai signe de l'angle, il te suffit de calculer le signe de son sinus.


---------------
TriScale innov
n°1550244
hamoudasaf​ira1
Posté le 26-04-2007 à 19:47:20  profilanswer
 

donc, je fais ça aprés le calcul de l'angle???????
je fasse le calcul de signum de son sinus????? ou bien comment merci de m'éclairtie ton poit de vue .

n°1550261
jagstang
Pa Capona ಠ_ಠ
Posté le 26-04-2007 à 20:30:29  profilanswer
 

acos et asin n'est défini que dans [-pi/2,pi/2].
Il faut ajuster le signe selon le cadran, et donc le signe du cos et du sin
car pour la machine, acos(-3/4) == acos(3/-4) alors que ça pas le cas en trigo


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°1550270
GrosBocdel
Posté le 26-04-2007 à 20:56:48  profilanswer
 

jagstang a écrit :


car pour la machine, acos(-3/4) == acos(3/-4) alors que ça pas le cas en trigo


 
ha

n°1550272
joneal
Posté le 26-04-2007 à 20:58:16  profilanswer
 

avec le produit scalaire ==> cos
avec le produit vectoriel ==> sin
 
avec les 2 on peux trouver le signe

n°1550279
hamoudasaf​ira1
Posté le 26-04-2007 à 21:11:29  profilanswer
 

alors je calcul le produit scalaire entre les 2 puis le produit vectoriels, ça va me donner le sinus et le cosinus et pour avoir l'angle je fais comment??? comme ça ??
BÂC = sign(produit vectoriel)*acos(produit scalaire);
 
mais comment calculer le sign en c++????

n°1550297
joneal
Posté le 26-04-2007 à 21:53:43  profilanswer
 

rappel :  
u ^v = ||u|| ||v|| sin(u,v)
u . v = ||u|| ||v|| cos(u,v)
 
pour un cos donné il y a 2 angles entre [0, 2*pi[ qui correspondent : pour sin>0 et sin<0 (quand l'angle est nulle l'angle est le meme = 0)
 
pour t'en convaincre revient au cercle trigonometrique (cercle de rayon 1, avec cos=abscisse, sin=ordonne d'un point du cercle)

n°1550298
joneal
Posté le 26-04-2007 à 21:58:22  profilanswer
 

et pour etre plus precis :

Code :
  1. double angle(u, v)
  2. {
  3.    // calculer c, s : cosinus et sinus de (u,v)
  4.    if (s>0)
  5.       return acos(c);
  6.    else
  7.       return -acos(c);
  8. }


 
technique 2:

Code :
  1. double angle(c, s)
  2. {
  3.     if (fabs(c)<eps) // eps tres petit a definir
  4.        return 0.
  5.     else
  6.        return atan(s/c);
  7. }


n°1550314
hamoudasaf​ira1
Posté le 26-04-2007 à 23:46:21  profilanswer
 

j'ai encore un petit problème, le calcul de sinus=le produit vectoriel
le produit vectoriel se calcule de la maniere suivante.
Ux = Vy * Wz - Wy * Vz;
Uy = Vz * Wx - Wz * Vx;
Uz = Vx * Wy - Wx * Vy;  
 
alors sinus sera un double de 3 dimensions comment pourrai-je faire la condition avec ce sinus. je pourrai calcule la norme de ce sinus pour qu'il soit en double, mais dans ce cas là je perd le signe de l'angle????? comment pourrai-je garder le signe de sinus???

mood
Publicité
Posté le 26-04-2007 à 23:46:21  profilanswer
 

n°1550368
_darkalt3_
Proctopathe
Posté le 27-04-2007 à 09:13:37  profilanswer
 

hamoudasafira1 a écrit :

j'ai encore un petit problème, le calcul de sinus=le produit vectoriel


Non.
tu oublies le produit des normes.
 

hamoudasafira1 a écrit :


le produit vectoriel se calcule de la maniere suivante.
Ux = Vy * Wz - Wy * Vz;
Uy = Vz * Wx - Wz * Vx;
Uz = Vx * Wy - Wx * Vy;  
 
alors sinus sera un double de 3 dimensions


NON §§§
 

hamoudasafira1 a écrit :

comment pourrai-je faire la condition avec ce sinus. je pourrai calcule la norme de ce sinus pour qu'il soit en double, mais dans ce cas là je perd le signe de l'angle????? comment pourrai-je garder le signe de sinus???


 [:ciler]  


---------------
Töp of the plöp
n°1550449
franceso
Posté le 27-04-2007 à 11:23:21  profilanswer
 

hamoudasafira1 a écrit :

j'ai encore un petit problème, le calcul de sinus=le produit vectoriel
le produit vectoriel se calcule de la maniere suivante.
Ux = Vy * Wz - Wy * Vz;
Uy = Vz * Wx - Wz * Vx;
Uz = Vx * Wy - Wx * Vy;  
 
alors sinus sera un double de 3 dimensions comment pourrai-je faire la condition avec ce sinus. je pourrai calcule la norme de ce sinus pour qu'il soit en double, mais dans ce cas là je perd le signe de l'angle????? comment pourrai-je garder le signe de sinus???

Bon, je crois qu'il serait bon que tu te replonges dans tes bouquins de maths de Lycée (ou peut-être même avant).
 
Déjà, tes vecteurs ils sont en 2D ou 3D ?
 
S'ils sont en 2D (i.e. avec Vz=Wz=0 dans l'expression ci-dessus), alors seule la coordonnée Uz est non nulle dans l'expression ci-dessus. C'est le signe de Uz qui te donne l'orientation de l'angle.
 
S'ils sont en 3D, alors je t'engage à réfléchir à la notion d'angle orienté en 3D, qui n'est pas si simple que cela. Je ne pense pas que tu sois dans ce cas là, alors je ne développe pas plus...


---------------
TriScale innov
n°1550622
hamoudasaf​ira1
Posté le 27-04-2007 à 15:17:03  profilanswer
 

mes vecteurs sont en 3D, et puis je sais faire le calcul de l'angle entre les 2 vecteurs en plusieurs méthodes, mais ce n'est pas ça le probléme, le problème c'est que je dois garder le signe de l'angle tel qu'il est en faisant le acos(cosA), je perd le signe et en calculant la norme de sinusA je perd aussi le signe de l'angle. Donc la solution pas seulement mathématiques mais aussi informatique de résourdre ce problème??????

n°1550626
_darkalt3_
Proctopathe
Posté le 27-04-2007 à 15:18:07  profilanswer
 

hamoudasafira1 a écrit :

Donc la solution pas seulement mathématiques mais aussi informatique de résourdre ce problème??????


 
100 balles et un mars ?


---------------
Töp of the plöp
n°1550653
hamoudasaf​ira1
Posté le 27-04-2007 à 15:41:56  profilanswer
 

on sait que AB.BC=||AB||||BC||Cos(ABC)
 
on tire comme cela le cosinus de l'angle, le soucis c'est que un angle et son oppposé on le même cosinus il faut donc déterminer le signe du sinus, par exemple avec le produit vectoriel
On plonge nos 2 vecteurs Ab et BC dans l'espace en rajoutant une coordonnée nulle ex: si AB(1,2)->AB(1,2,0)
 
On calcule le produit vectoriel de nos deux nouveaux vecteurs ce qui nous donne un troisième vecteur orthogonal au plan de base dans l'espace donc de la forme (0,0,k) et on regarde le signe de k pour savoir de quel coté se place BC par rapport à AB: si k>0 on doit tourner dans le sens inverse des aiguille d'une montre pour amener AB sur BC.
 
ça est une hypothése, sauf que je travail en 3D; donc je ferai comment dans ce cas là????

n°1550841
joneal
Posté le 27-04-2007 à 22:13:51  profilanswer
 

Bonsoir,
 
en fait apres relecture de mon ancien post et avec ce que tu dis :
l'angle "signé" de 2 vecteurs 3D n'a pas de sens en 3D si tu definie pas d'abord l'orientation dans ton plan des 2 vecteurs !
 
ie il faut te donne un plan et une orientation !!
 
tu peux te documenter ici http://fr.wikipedia.org/wiki/Angle [...] ent.C3.A9s

n°2066247
indexation
Posté le 26-03-2011 à 18:25:49  profilanswer
 

Bonjour a tous,
j'ai un problème de calcul de l'angle orienté (angle geometrique) entre 2 vecteurs de dim n. x(x1,x2,...,xn) et y(y1,y2,...,yn)
j'ai un problème de déterminer le signe de l'angle par le méthode de produit vectoriel de deux vecteurs de dim n (u ^v = ||u|| ||v|| sin(u,v) ).
Je vous remercie && Bon weekend


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  calcul d'un angle entre 2 vecteurs en c++ (en respectant le signe)

 

Sujets relatifs
librairie pour calcul dans les extensions de corps fini et les CECalcul du temps d'execution en millisecondes
Vecteurs de pointeurs[resolu]calcul d'une somme avec plusieurs INPUT
methodes de trie des vecteurs (complexité...)Calcul d'un % dans ma requete mysql
[Excel] Calcul matricielCalcul Impossible pour Moi !! [Resolu]
[réglé] fonction de calcul de distance[RESOLU]comment calculer la distance entre 2 villes (code postaux?) ??
Plus de sujets relatifs à : calcul d'un angle entre 2 vecteurs en c++ (en respectant le signe)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR