Desplazamiento pequeño al calcular la rotación en función del punto de contacto

Necesito tener una cara sprite el cursor / punto de contacto. El vector del punto de contacto se calcula de la siguiente manera:

game.getCamera().unproject( new Vector3().set(Gdx.input.getX(), Gdx.input.getY(), 0) , 0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()) 

Y luego calculo los grados que el sprite necesita para girar con el siguiente método:

 public void rotateTo(Vector3 vector) { double angle = Math.atan2(vector.y - position.y, vector.x - position.x); rotation = (float) Math.toDegrees(angle) - 90; sprite.setRotation(rotation); } 

El problema es que hay un pequeño desplazamiento en algunas rotaciones, por ejemplo (el punto rojo indica la posición táctil y la flecha es el sprite que se debe girar), en la primera imagen es más o menos donde debe estar, pero en los otros su ¿Qué podría estar causando este error ?:

Introduzca aquí la descripción de la imagenIntroduzca aquí la descripción de la imagen

Como se puede ver en las primeras 2 imágenes con un pequeño cambio en el eje X, la precisión disminuye drásticamente.

Más ejemplos:

Introduzca aquí la descripción de la imagenIntroduzca aquí la descripción de la imagen

La posición está en la parte inferior izquierda independientemente del origen, porque el origen es relativo a la posición. Así que estás calculando el ángulo basado en la parte inferior izquierda del sprite en lugar del centro. Es necesario desplazar la posición por el origen si desea medir su ángulo con respecto al centro del sprite.

 double angle = Math.atan2( vector.y - position.y - spriteOrigin.y, vector.x - position.x - spriteOrigin.x); 

También tenga esto en cuenta al dibujar su sprite … su posición es siempre en la parte inferior izquierda, así que tenga esto en cuenta al establecer su posición.

  • ¿Debo confiar en Android para descartar los sorteos fuera de pantalla?
  • Problema básico de conversión imperial
  • Android Fourier Transform Realtime - Renderscript
  • Detectar si está a un kilómetro del punto de interés
  • ¿Cómo mostrar fórmulas matemáticas en mi aplicación Android?
  • ¿Cómo inserto caracteres especiales como texto en el editor de XML para Android?
  • La mejor práctica para calcular la velocidad media de las coordenadas GPS
  • Fórmulas matemáticas en textview en android
  • 1000 * 60 * 60 * 24 * 30 resultados en un número negativo
  • Determinación de números pares / impares (enteros)?
  • En C, tan (30) me da un valor negativo! ¿Por qué?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.