2011-07-09 10 views
6

Estoy trabajando en una pequeña aplicación web en la que necesito rotar formas. I desea lograr esto agarrando un punto en un círculo y arrastrándolo para rotar la imagen.Buscar grados (0-360º) de punto en un círculo

Aquí es una ilustración rápida para ayudar a explicar las cosas:

two points on circle, i'm looking to find the degrees of p1

Mi círculo principal se puede arrastrar cualquier parte del lienzo. Sé que es radio (r) y donde las 12 en punto (p0) siempre serán (cx, cy - r). Lo que necesito saber es qué grado será p1 (0-360º) para poder rotar el contenido del círculo principal de acuerdo con Raphael.rotate().

He corrido a través de un montón de diferentes formulaciones de JavaScript para encontrar esto (example), pero ninguno parece darme valores entre 0-360 y mis habilidades matemáticas básicas son lamentablemente deficientes.

El Color Picker demo (deslizando el cursor a lo largo del anillo de la derecha) tiene el comportamiento que quiero, pero incluso después de estudiar detenidamente el código fuente, parece que no puedo replicarlo con precisión.

Cualquier cosa que apunte en la dirección correcta sería apreciada.

Respuesta

9
// Angle between the center of the circle and p1, 
// measured in degrees counter-clockwise from the positive X axis (horizontal) 
(Math.atan2(p1.y-cy,p1.x-cx) * 180/Math.PI + 360) % 360 

El ángulo entre el centro del círculo y p0 siempre será + 90 °. Ver Math.atan2 para más detalles.

Cuestiones relacionadas