52 votes

Comment calculer un angle à partir de trois points ?

Disons que vous avez ceci :

P1 = (x=2, y=50)
P2 = (x=9, y=40)
P3 = (x=5, y=20)

Supposons que P1 est le point central d'un cercle. Il est toujours le même. Je veux l'angle qui est formé par P2 y P3 ou, en d'autres termes, l'angle qui se trouve à côté de P1 . L'angle intérieur pour être précis. Il s'agira toujours d'un angle aigu, donc inférieur à -90 degrés.

J'ai pensé : Mec, c'est des maths simples de géométrie. Mais je cherche une formule depuis environ 6 heures maintenant, et je ne trouve que des gens qui parlent de trucs compliqués de la NASA comme des arccos et des trucs de produit scalaire vectoriel. J'ai l'impression que ma tête est dans un frigo.

Y a-t-il des gourous des mathématiques ici qui pensent que c'est un problème simple ? Je ne pense pas que le langage de programmation soit important ici, mais pour ceux qui le pensent : java et objective-c. J'en ai besoin pour les deux, mais je ne l'ai pas encore étiqueté pour ceux-ci.

40voto

Lance Roberts Points 11164

Si vous voulez dire l'angle dont P1 est le sommet, cela devrait fonctionner :

cos -1 ((P 12 2 + P 13 2 - P 23 2 )/(2 * P 12 * P 13 ))

où P 12 est la longueur du segment de P1 à P2, calculée par

sqrt((P1 x - P2 x ) 2 + (P1 y - P2 y ) 2 )

33voto

ire_and_curses Points 32802

Si vous avez 3 points, vous avez un triangle dont les longueurs des arêtes sont toutes connues. Utilisez donc la règle du cosinus :

http://en.wikipedia.org/wiki/Law_of_cosines

20voto

Andrea Ambu Points 6479

Cela devient très simple si vous le considérez comme deux vecteurs, l'un du point P1 à P2 et l'autre de P1 à P3.

donc :
a = (p1.x - p2.x, p1.y - p2.y)
b = (p1.x - p3.x, p1.y - p3.y)

Vous pouvez alors inverser la formule du produit scalaire :
dot product
pour obtenir l'angle :
angle between two vectors

Rappelez-vous que dot product signifie simplement : a1*b1 + a2*b2 (juste 2 dimensions ici...)

14voto

Andre Miller Points 6713

En fait, vous avez deux vecteurs, un vecteur de P1 à P2 et un autre de P1 à P3. Tout ce dont vous avez besoin est une formule pour calculer l'angle entre deux vecteurs.

Jetez un coup d'œil aquí pour une bonne explication et la formule.

alt text

10voto

Treb Points 11153

Si vous considérez P1 comme le centre d'un cercle, votre raisonnement est trop compliqué. Vous avez un triangle simple, donc votre problème peut être résolu avec la fonction loi des cosinus . Il n'est pas nécessaire d'effectuer une transformation en coordonnées polaires ou autre. Disons que les distances sont P1-P2 = A, P2-P3 = B et P3-P1 = C :

Angle = arccos ( (B^2-A^2-C^2) / 2AC )

Tout ce que vous devez faire, c'est calculer la longueur des distances A, B et C. Celles-ci sont facilement disponibles à partir des coordonnées x et y de vos points et Le théorème de Pythagore

Longueur = sqrt( (X2-X1)^2 + (Y2-Y1)^2 )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X