Trouver angle deux vecteurs même origine 3D XYZ
Utilisateur anonyme
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Bonjour,
Je cherche à calculer l'angle entre deux vecteurs 3d de même origine,
quelqu'un sait comment faire?
Mes deux vecteurs s'appellent AB et AC, et A = (0, 0, 0)
Merci d'avance.
Je cherche à calculer l'angle entre deux vecteurs 3d de même origine,
quelqu'un sait comment faire?
Mes deux vecteurs s'appellent AB et AC, et A = (0, 0, 0)
Merci d'avance.
2 réponses
-
Bonjour,
C'est pas vraiment de l'informatique ça... c'est plutôt des maths !
https://fr.wikipedia.org/wiki/Produit_scalaire -
C'est des mathématiques, mais pour un algorythme, donc je pense que ça rentre dans le cadre de l'algorythmique ^^ je vais voir merci
-
Je ne vois pas d'algorithmique là-dedans.
Cela s'écrit en une assignation triviale.
Tu ne précises aucun langage.
Effectuer une somme de 3 produits , extraire 2 racines carrées (non nulles) .... une division et un arc_cosinus ne demandent pas beaucoup de méditation.
En Python (très vite rédigé et à peaufiner):import math def get_angle( v1, v2) : if isinstance(v1, list) and isinstance(v2, list) and len(v1)==len(v2) : p = 0 for i in range( len(v1)) : p += v1[i] * v2[i] n1 = 0 n2 =0 for i in range( len(v1)) : n1 += v1[i] * v1[i] n2 += v2[i] * v2[i] if 0 == n1 * n2 : raise ValueError('No parameter should be a zero vector') return math.acos( p /math.sqrt(n1 * n2)) else: raise TypeError('Bad parameters') print get_angle([0, 0, 1], [1, 0, 0]) # print get_angle([0, 0, 1], 1) print get_angle([0, 0, 0], [1, 1, 1])
johand@bata:~/src/CCM/PYTHON$ python angle.py
1.57079632679
Traceback (most recent call last):
File "angle.py", line 21, in <module>
print get_angle([0, 0, 0], [1, 1, 1])
File "angle.py", line 16, in get_angle
raise ValueError('No parameter should be a zero vector')
ValueError: No parameter should be a zero vector- Merci de ces réponses, alors de 1 : il s'agit (vous auriez pu deviner) de maths pour de la représentation en 3d, donc c'est de la programmation, de 2 : je parle de méthode, donc évidemment que je ne précise pas de langage, c'est juste un problème de méthode, que j'essaie detrouver, que je pourrai rédiger moi même en forme de code, et si j'avais précisé le langage, j'aurais juste perdu des chances de trouver une réponse.
sinon merci je vais regarder ce que tu as fait
-
La "méthode" c'est à dire la "théorie" c'est des maths...
Résumé des produits scalaires :OA.OB = ||OA|| * ||OB|| * cos(AÔB)
D'oùAÔB = arccos(OA.OB / (||OA|| * ||OB||))
OrOA.OB=(xA-xO)(xB-xO)+(yA-yO)(yB-yO)+(zA-zO)(zB-zO)
Et||OA|| = √((xA-xO)²+(yA-yO)²+(zA-zO)²)
, idem pour||OB||
.
On mélange le tout et ça donne AÔB...
Dans le cas particulier de O(0,0,0) ça se simplifie :AÔB=arrcos((xA*xB+yA*yB+zA*zB)/(√(xA²+yA²+zA²)*√(xB²+yB²+zB²))
Et j'enfonce le clou : ça ce n'est pas un algorithme, c'est une formule de maths...
-