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.

  • MathML y ​​Java
  • ¿Cómo determino qué triángulo tocó el usuario en este rectángulo?
  • Android Dividir el círculo en N partes iguales y conocer las coordenadas de cada punto de división
  • ¿Cuál es la mejor práctica para redondear un flotador a 2 decimales?
  • Obtener los siguientes N puntos geográficos más cercanos
  • Configuración de la alarma en base mensual android
  • Android - calcular el ángulo del arco
  • En C, tan (30) me da un valor negativo! ¿Por qué?
  • Determine el ángulo de visión de la cámara del teléfono inteligente
  • Escala alrededor de un punto específico en el sistema de coordenadas 2d
  • Convertir valores de ReplayGain a ajustes de volumen
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.