Bonjour a tous,
Je cherche a calculer l'angle oriente de 2 vecteurs. Cependant, je souhaite obtenir un angle compris dansl'intervalle [0;2pi[. Pouvez vous m'aider ?
Merci d'avanve pour vos pistes ou vos reponses.
Olivier
-----
Bonjour a tous,
Je cherche a calculer l'angle oriente de 2 vecteurs. Cependant, je souhaite obtenir un angle compris dansl'intervalle [0;2pi[. Pouvez vous m'aider ?
Merci d'avanve pour vos pistes ou vos reponses.
Olivier
bonjour olivier,
tout angle orienté a effectivement une infinité de mesure; et si l'une d'elle est x, alors toutes les autres s'écriront sous la forme x + k*2*pi, ou k est une entier relatif.
A partir de là, pour obtenir un x dans l'intervalle [0;2*pi[, il suffit de retirer un nombre suffisant de "2*pi" à ton angle pour arriver à ce resultat.
exemple:
ton angle vaut 185*pi/6, tu veux le "simplifier"
tu remarques par un moyen quelconque que 185/6 - 2*15 = 185/6 - 30 =5/6
(par exemple, à la calculatrice, tu réalise 185/6 = 30.83333 , docn 185/6 - 30 = 0.8333 = 5/6)
donc or, 185*pi/6 est la mesure du meme angle orienté que 185/6*pi-2*15*pi puisque cette derniere est bien de la forme 185*pi/6 + k*2*pi, avec k = -15
mais 185/6*pi-2*15*pi = (185/6 - 30) * pi = 5/6 * pi, qui est bien compris ds l'intervalle demandé.
PS: la mesure principale est comprise entre ]-pi ; pi], et non [0;2*pi[...
Salut,
Merci pour ta reponse, mais ce n'st pas du tout ce que j'attends. Supposons que j'ai 3 vecteurs u(0,-1), v(-1,-1) et w(1,-1).
Je peux calculer l'angle (u,v) avec un produit scalaire, et l'angle (u,w) de la meme facon, mais ils sont orientes differemment. Or, le produit scalaire me donne le meme resultat, alors que j'aimerais obtenir un angle positif et unangle negatif, ou un angle positif et son complémentaire pour 2pi.
Peut etre y a t il une facon en utilisant le produit vectoriel. On peut faire le produit vectoriel des 2 vecteurs, regarder le signe de la composant en Z et conclure si le triangle est direct ou indirect. Ensuite, a partir de la mesure de l'angle (son sinus), et de "l'orientation" du triangle, on peut conclure, mais c'est trop complexe (pas tant que ca en fait).
Au final,je cherche une methode simple ... Si vous en avez une, je prends.
Merci
Le produit scalaire permet d'avoir le cos de l'angle le produit vectoriel d'avoir le sinus de l'angle. Cela définie entièrement l'angle.
Après il faut être capable d'inverser le cos et ou le sin pour retomber sur l'angle lui-même.
En partique si tu fais cela avec un ordinateur, en C par exemple il y deux fonctions distinctes ; l'une atan (si ma mémoire est bonne qui prend comme argument la tangente de l'angle) et qui renvoie un angle en -pi et pi (toujours si ma mémoire est bonne, l'autre atan2 qui prend comme argument le sinus et le cosinus et qui renvoie l'angle orienté.
Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.
Pour zoup1 ->
C'est exact sauf petit rectificatif :
Atan revoie 1 angle compris entre -Pi/2 et +Pi/2
Atan2 revoie 1 angle compris entre -Pi et +Pi
Spock67 :
OK, merci, c'est parfait ! Ce sera pas du C, mais du C++, et je vais m'en sortir avec ce atan2 ...
Merci,
Je savais bien que ma mémoire n'était plus très bonne...
Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.
Je me posais exactement la même question ça marche bien en calculant le cos, le sin, la tan et donc ensuite arctan pour trouver l'angle orienté de 2 vecteurs.
Cependant pour mon application ça ne marche pas, je m'explique:
J'ai un tube coudé défini par les coordonnées de ses coudes, je voudrais connaitre l'angle pour chaque coudes de ce tube, le problème avec votre méthode c'est que le calcul s'effectue comme si les vecteurs avaient le même point d'origine, l'angle calculé n'est donc pas le bon pour mon application.
Ex:En 2D déjà après je généraliserais:
point A: x=0 y=0 z=0
point B: x=1 y=0 z=0
point C: x=2 y=1 z=0
Pour le calcul je pose le vecteur u(A-B) et v(B-C)
Le calcul me donne un angle de 45° car les vecteurs u et v on la même origine dans le calcul, alors que mon tube à un angle de 135° si je met les vecteurs u et v bout à bout.
Quelqu'un à une solution ou une formule?
Ca définit l'angle à 2kpi près, puisque cos et sin sont périodiques. De même, ce ne sont pas le cos et le sin que l'on inverse, mais leurs restrictions respectives à [0,pi] ou [-pi/2 / pi/2]Envoyé par zoup1Le produit scalaire permet d'avoir le cos de l'angle le produit vectoriel d'avoir le sinus de l'angle. Cela définie entièrement l'angle.
Après il faut être capable d'inverser le cos et ou le sin pour retomber sur l'angle lui-même.
OK, mais cela ne donne que l'angle orienté de 2 vecteurs mais pas l'angle qu'il existe entre les 2 vecteurs bout à bout?
Je ne sais pas si j'ai été assez clair, vu ta réponse.
Je n'ai pas compris la différence entre angle orienté de deux vecteurs et angle qu'il existe entre les deux vecteurs bout à bout.Envoyé par jerome-gmcOK, mais cela ne donne que l'angle orienté de 2 vecteurs mais pas l'angle qu'il existe entre les 2 vecteurs bout à bout?
Je ne sais pas si j'ai été assez clair, vu ta réponse.
En tout cas :
Soient les point A, B et C et considérons les deux vecteurs -AB-> et -AC->. [(-AB->)*(-AC->)]/[II-AB->II*II-AC->II]=cos(@), @ étant l'angle BAC. [Le produit scalaire des vecteurs sur le produit des normes égale le cos de l'angle entre ces deux vecteurs.]
Et comme le cos d'un angle égale le cos de l'angle opposé...
Ensuite, pour voir l'orientation de l'angle, tu peux visualiser (ou esquisser) tes vecteurs.
Shokin
Pardon, humilité, humour, hasard, tolérance, partage, curiosité et diversité => liberté et sérénité.
OK ça je sais faire mais mon problème est en fait:
J'ai un tube coudé défini par les coordonnées de ses coudes. Il possède x coudes et je voudrais connaître les angles de chaque coude de manière automatique juste par calculs sous Excel avec l'aide de programme en VBA.
La démarche est:
Le produit scalaire me donne la valeur du cos
Le produit vectoriel me donne la valeur absolue du sin, et c'est la qu'est le problème, je ne sais pas en réalité si le sin est positif ou négatif et ça ne me permet donc pas de connaître l'angle à partir du cos et du sin.
Je ne suis pas sur de bien comprendre ce qui te gêne... j'essaye quand même :
Si tu as un coude A-> B -> C et que tu cherche l'angle ABC. IL te suffit de considérer les deux vecteurs et . te donne le cosinus de l'angle. et te donne le sinus, avec le bon signe !!! on parle bien de l'angle qui va de BA à BC.
Cela t'éclaire ?
Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.
Je crois simplement qu'il te faut prendre chaque vecteur dans l'ordre du tube, du chemin (ou dans l'autre sens, pourvu qu'il y ait un sens) :
-AC->=-AB->+-BC->
Donc le sinus de l'angle égale -AB->x-BC-> = -CB->x-BA-> (chemin inverse)
Dans le produit vectoriel de deux vecteurs, si je change le signe d'un des vecteurs (par exemple de -BC-> à -CB->), le signe change.
Shokin
Pardon, humilité, humour, hasard, tolérance, partage, curiosité et diversité => liberté et sérénité.
Je ne trouve pas ça shokin:
Démonstration:
Soient les vecteurs:
AB-> (-1, 0, 0)
BC-> (1, -1, 0)
||AB->||=1
||BC->||=2^0.5= racine de 2 (pour les novices)
AB-> ^ BC-> = (0, 0, 1)
||AB-> ^ BC->|| = 1
--> sin (AB, BC) = ||AB-> ^ BC->|| / ( ||AB->||.||BC->|| )
= 1 / (1*2^0.5)
= (2^0.5)/2 racine de 2 sur 2
= sin positif
Maintenant remplacons BC-> par CB->
CB-> = (-1, 1, 0)
||CB->||= 2^0.5
AB-> ^ CB-> = (0, 0, -1)
||AB-> ^ CB->|| = 1
--> sin (AB, CB) = ||AB-> ^ CB->|| / ( ||AB->||.||CB->|| )
= 1 / (1*2^0.5)
= (2^0.5)/2 racine de 2 sur 2
= sin positif
Et dans plusieurs exemple je ne trouve pas sinus négatif.
A moins qu'il y ait une erreur dans mes formules de départ, le sinus ne change pas de signe.
J'ai bon???
Si je comprends bien tes notations il y a un truc qui ne va pas...
par définition : ||AB-> ^ BC->|| = ||AB->||.||BC->||.|sin(AB,BC)|
mais cela ne donne effectivement aucune information sur le signe du sinus.
par contre : AB-> . BC-> = ||AB->||.||BC->||.cos(AB,BC). Ici on a une information sur le signe du cosinus.
Connaitre le signe du cosinus est utile car cela permet de savoir si c'est un angle obtu ou aigu. Connaitre le signe du sinus n'a pas forcément un grand sens au moins dans l'absolu/ Pour que cela en ait un, il faut définir un sens de rotation positif arbitraire.
Si tu veux vraiment faire cela, il faut donc définir un sens de rotation positif. Imaginons que cela se passe dans un plan. Il est alors facile d'imposer se sens arbitraire tout le temps. Par exemple, il suffit de compter positiviment un angle lorsque cela correspond à une rotation dans le sens trigonométrique. Le plus général est de définir ce sens de rotation positif par un vecteur unitaire perpendiculaire au plan. Le sens trigonométrique correspond alors un vecteur qui est orienté en sortant du plan en question.
Lorsque tu calcules le produit vectoriel de tes deux vecteurs, tu obtiens un vecteur qui est orienté perpendiculairement au plan des 2 vecteurs de tel sorte que les 2 premiers vecteurs avec le 3ème vecteur forment un trièdre direct. Tu peux alors connaitre l'orientation en calculant le produit scalaire entre le vecteur qui définie sens de rotation positif et le vecteur résultant du produit vectoriel des 2 premiers vecteurs.
Par ailleurs j'ai l'impression qu'il n'est pas inutile de rappeler la façon de calculer un produit vectoriel entre 2 vecteurs A->(Ax,Ay,Az) et B->(Bx,By,Bz) :
A-> ^ B-> = ((Ay Bz - Az By) , (Az Bx - Ax Bz), (Ax By - Ay Bx))
Heu, j'espère que c'est pas trop confus...
Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.
Peut-être que je me suis trompé, j'ai dit "je crois...". Je n'ai pas vérifié.
Mais il me semble que je suis un chemin (un tube), non que je sautille sur ce chemin.
Je vais de A à B, puis de B à C, je vais donc chercher à calculer -AB->x-BC->.
Shokin
Pardon, humilité, humour, hasard, tolérance, partage, curiosité et diversité => liberté et sérénité.
Il faut faire un dessin pour savoir de quel angle vous voulez parler... On a le droit de parler de celui que l'on veut... mais encore faut-il le dire correctement...
Sur la figure que j'ai faite donc, que cherches tu à mesurer ?
alpha, beta, phi ou theta ?
Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.
C'est l'angle Béta dont j'ai besoin. Voir fichier joint.
En fait pour le coude formé par les points A, B et C, je sais que je doit considérer les vecteurs BA-> et BC-> pour trouver l'angle Béta et non le vecteur AB->.
Tu me dis qu'il y a un problème dans ma notation mais je ne vois pas ou j'ai fait une erreur :
Par définition ||AB-> ^ BC->|| = ||AB->||.||BC->||.|sin(AB,BC)|
et cela équivaut à:
|sin (AB, BC)| = ||AB-> ^ BC->|| / ( ||AB->||.||BC->|| )
Et au sujet du produit vectoriel:
Si
AB-> (-1, 0, 0)
BC-> (1, -1, 0)
--> AB-> ^ BC-> = (0, 0, 1)
ou avec une autre écriture AB-> ^ BC-> 0
0
1
J'ai bien appliqué la même formule que toi?
Je ne vois pas d'erreur?
Au sujet de la solution que tu proposes je vais me pencher dessus. Pour l'instant c'est un peu flou.
A suivre...