Estou trabalhando em um mostrador que gira em torno de um círculo.
Esse mostrador deve mover o mouse em qualquer lugar do círculo para ajustar a posição do mostrador em um ponto do círculo com o mesmo ângulo do clique. Por exemplo, no mostrador acima, se você clicar no ponto mostrado em rosa abaixo, moverei o mostrador acima desse ponto, mas no círculo.
Eu sei como obter a posição de um ponto em um círculo, dado um raio e um ângulo (em radianos). Essa é a fórmula :
x = Cos(angle) * radius + CenterX;
y = Sin(angle) * radius + CenterY;
No entanto, estou procurando fazer o contrário - tenho um ponto de clique, que quero transformar em um ponto em um círculo (para onde o botão de controle vai). Estou tentando usar este ponto (e um determinado raio) para descobrir o ângulo em radianos, para que eu possa colocar o botão de controle no círculo no mesmo ângulo.
Existe uma fórmula útil que eu possa usar para fazer isso?
fonte
atan
é uma abreviação dearctan
eatan2
é apenas uma função que aceita argumentos individuais e faz a divisão para você.Respostas:
Confira a função atan2 .
Ele fornece o ângulo entre (0, 0) e (x, y)
x
ey
os argumentos da função.Edit: se o centro do círculo não é (0, 0), não importa, basta fazer o seguinte:
atan2(y - cy, x - cx)
.fonte
(0,0)
? Suponho que apenas compensei os argumentosatan2
conforme mostrado por @Luis abaixo?y
atan2
foram para trás!Você precisa do centro do botão giratório e do ponto do cursor, juntamente com a função atan2 . Você o usa assim:
fonte
Uma referência aceitável: http://www.mathsisfun.com/polar-cartesian-coordinates.html
fonte