2012-01-23 21 views
12

Si tengo una imagen 720, 720 que tiene este aspecto ..Encuentra ángulo de un punto desde el centro del círculo

enter image description here

¿Cómo resuelvo el ángulo de los tocados x, y teniendo en cuenta que el centro xey son 360, 360 Muchos de los cálculos que veo para esto asumen que el origen es 0,0 (que está arriba a la izquierda), así que obtengo resultados incorrectos. Supongo que 0 siempre está en la parte superior y no está girado.

+0

¿Qué es exactamente lo que encontramos hasta ahora? Si su problema es solo acerca de las coordenadas del centro, estaremos encantados de ayudarle. –

+1

Tradicionalmente, 0 grados está a la derecha, 90 está arriba, 180 queda, y 270 está abajo. (Puedo malinterpretar su fraseo). –

Respuesta

10

Puede ser más claro de esta manera:

(Math.toDegrees(Math.atan2(fromLeft - 360.0, 360.0 - fromTop)) + 360.0) % 360.0 

Adición de un giro de 360 ​​grados y aplicar el operador de módulo le da el ángulo positivo, que atan2 no lo hace.

+0

Esto parece ser lo más cercano a cualquier solución sugerida aquí. He entendido mal en mi comentario anterior, si sustituyo x touch coordenada por fromLeft ey por fromTop obtengo un ángulo positivo de nuevo al menos. Al hacer clic en alrededor de las 3 en punto da unos 90 grados como se esperaba pero si hago clic en el reloj de las 6 0 me acerco a 360 grados, lo que no se esperaba, a las 9 en punto los 270 grados correctos. Parece que esto está bastante cerca, pero aún hay un problema con las 12 y las 6 en ese cálculo – Kyros

+0

Si hago clic en el reloj 12 0'Opciono las 180 y las 6 en punto obtengo 0, por lo que estas se revierten de alguna manera. – Kyros

+0

Corregido de "fromTop - 360.0" a "360.0 - fromTop". Probado en JavaWIDE. – minopret

0
java.lang.Math.atan2(y-360,x-360); 
0

las coordenadas de la pantalla no van por el camino de las trigonométricas.

uso java.lang.Math.atan2(-(y-360),x-360);

14

Aquí está la fórmula general:

angle = atan2(mouseY - cirleCenterY, mouseX - circleCenterX); 
+4

No debería ser '' 'angle = atan2 (mouseY - circleCenterY, mouseX - circleCenterX);' '' –

Cuestiones relacionadas