Estoy trabajando en un dial que gira alrededor de un círculo.
Este dial debería permitirle mover el mouse a cualquier parte del círculo para ajustar la posición del dial a un punto del círculo con el mismo ángulo que el clic. Por ejemplo, desde el dial de arriba si hace clic en el punto que se muestra en rosa debajo, movería el dial sobre ese punto pero en el círculo.
Sé cómo obtener la posición de un punto en un círculo dado un radio y un ángulo (en radianes). Esa es esta fórmula :
x = Cos(angle) * radius + CenterX;
y = Sin(angle) * radius + CenterY;
Sin embargo, estoy buscando hacer algo de lo contrario: tengo un punto de clic, que quiero convertir en un punto en un círculo (donde va la perilla de control). Estoy tratando de usar este punto (y un radio dado) para calcular el ángulo en radianes, de modo que pueda colocar la perilla de control en el círculo en el mismo ángulo.
¿Hay alguna fórmula útil que pueda usar para lograr esto?
fuente
atan
es la abreviatura dearctan
, yatan2
es solo una función que acepta argumentos individuales, y hace la división por usted.Respuestas:
Echa un vistazo a la función atan2 .
Le da el ángulo entre (0, 0) y (x, y),
x
yy
ser los argumentos de la función.Editar: si el centro del círculo no es (0, 0), no importa, simplemente hacer esto:
atan2(y - cy, x - cx)
.fuente
(0,0)
? Supongo que acabo de compensar los argumentosatan2
como se muestra en @Luis a continuación.y
atan2
fueron al revés!Necesita el centro del mando y el punto del cursor junto con la función atan2 . Luego lo usas así:
fuente
Una referencia aceptable: http://www.mathsisfun.com/polar-cartesian-coordinates.html
fuente