Trouver angle deux vecteurs même origine 3D XYZ
Utilisateur anonyme
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
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.
A voir également:
- Angle vecteur 3d
- Architecte 3d gratuit - Télécharger - Architecture & Déco
- 3d slash - Télécharger - 3D
- Smartshow 3d - Télécharger - Visionnage & Diaporama
- Google maps satellite 3d - Guide
- Paint 3d mac - Télécharger - Dessin & Illustration
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 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):
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
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
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 :
D'où
Or
Et
On mélange le tout et ça donne AÔB...
Dans le cas particulier de O(0,0,0) ça se simplifie :
Et j'enfonce le clou : ça ce n'est pas un algorithme, c'est une formule de maths...
Résumé des produits scalaires :
OA.OB = ||OA|| * ||OB|| * cos(AÔB)
D'où
AÔB = arccos(OA.OB / (||OA|| * ||OB||))
Or
OA.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...