8 votes

Trouver les degrés (0-360º) du point sur un cercle

Je travaille sur une petite application web dans laquelle j'ai besoin de faire pivoter des formes. J'aimerais réaliser cela en attrapant un point sur un cercle et en le faisant glisser pour faire tourner l'image.

Voici une illustration rapide pour aider à expliquer les choses :

deux points sur un cercle, je cherche à trouver les degrés de p1

Mon cercle principal peut être déplacé n'importe où sur le canevas. Je connais son rayon (r) et l'endroit où se situe toujours midi (p0) (cx, cy - r). Ce que j'ai besoin de savoir, c'est à quel degré sera p1 (0-360º) afin de pouvoir faire tourner le contenu du cercle principal en conséquence avec Raphael.rotate().

J'ai exploré différentes formulations JavaScript pour trouver cela (exemple), mais aucune ne semble me donner des valeurs entre 0 et 360 et mes compétences mathématiques de base sont lamentablement déficientes.

La démonstration du sélecteur de couleurs (en déplaçant le curseur le long de l'anneau à droite) a le comportement que je souhaite, mais même après avoir examiné attentivement le code source, je n'arrive pas à le reproduire avec précision.

Tout élément pour me diriger dans la bonne direction serait apprécié.

10voto

Phrogz Points 112337
// Angle entre le centre du cercle et p1,
// mesuré en degrés dans le sens antihoraire depuis l'axe X positif (horizontal)
( Math.atan2(p1.y-cy,p1.x-cx) * 180/Math.PI + 360 ) % 360

L'angle entre le centre du cercle et p0 sera toujours de +90°. Voir Math.atan2 pour plus de détails.

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