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:
- ¿Qué es una buena biblioteca para analizar expresiones matemáticas en java?
- Android - Ajuste de la posición de la vista de imagen en la parte superior de una vista de imagen con zoom
- ¿Cómo calcular la posición en un círculo con un cierto ángulo?
- Comprender claramente el cálculo de la matriz
- Dibuja un camino curvo en la lona?
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 ?:
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:
- ¿Cómo inserto caracteres especiales como texto en el editor de XML para Android?
- Parallax XY y cálculo de la rotación
- Fórmulas matemáticas en textview en android
- Mostrar una buena fórmula de matemáticas en Android
- Tengo problemas para entender lo que realmente obtiene GetDisplayRect () de PhotoView (construyendo una herramienta de recorte de fotos de android)
- Android: ¿Cómo obtener sólo dos dígitos después del punto en el valor decimal? no quiere trunc el valor
- Detectar si está a un kilómetro del punto de interés
- Android getOrientation Azimut se contamina cuando el teléfono está inclinado
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.
- No se puede firmar la versión APK -: app: shrinkReleaseMultiDexComponents FALLED
- ¿Cómo averiguar si una etiqueta NFC aún está en el rango de un Android ahora?