calcul d'un angle entre 2 vecteurs en c++ (en respectant le signe) - C++ - Programmation
Marsh Posté le 26-04-2007 à 19:21:43
pour connaitre le vrai signe de l'angle, il te suffit de calculer le signe de son sinus.
Marsh Posté le 26-04-2007 à 19:47:20
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 .
Marsh Posté le 26-04-2007 à 20:30:29
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
Marsh Posté le 26-04-2007 à 20:56:48
jagstang a écrit : |
ha
Marsh Posté le 26-04-2007 à 20:58:16
avec le produit scalaire ==> cos
avec le produit vectoriel ==> sin
avec les 2 on peux trouver le signe
Marsh Posté le 26-04-2007 à 21:11:29
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++????
Marsh Posté le 26-04-2007 à 21:53:43
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)
Marsh Posté le 26-04-2007 à 21:58:22
et pour etre plus precis :
Code :
|
technique 2:
Code :
|
Marsh Posté le 26-04-2007 à 23:46:21
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???
Marsh Posté le 27-04-2007 à 09:13:37
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 : |
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??? |
Marsh Posté le 27-04-2007 à 11:23:21
hamoudasafira1 a écrit : j'ai encore un petit problème, le calcul de sinus=le produit vectoriel |
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...
Marsh Posté le 27-04-2007 à 15:17:03
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??????
Marsh Posté le 27-04-2007 à 15:18:07
hamoudasafira1 a écrit : Donc la solution pas seulement mathématiques mais aussi informatique de résourdre ce problème?????? |
100 balles et un mars ?
Marsh Posté le 27-04-2007 à 15:41:56
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à????
Marsh Posté le 27-04-2007 à 22:13:51
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
Marsh Posté le 26-03-2011 à 18:25:49
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
Marsh Posté le 26-04-2007 à 19:18:31
Bonjour à tous
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
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.