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:
- Almacene la orientación en una matriz y compare
- Android - Ajuste de la posición de la vista de imagen en la parte superior de una vista de imagen con zoom
- ¿Qué es una buena biblioteca para analizar expresiones matemáticas en java?
- Escala alrededor de un punto específico en el sistema de coordenadas 2d
- Implementar página curl en android?
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 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
- ¿Cómo obtengo el ángulo del teléfono en relación con el campo magnético de la Tierra?
- Mover la mano Minuto en el reloj de Android
- Convertir valores de ReplayGain a ajustes de volumen
- Latitud / Longitud y metros
- Calcular la distancia entre dos puntos directamente en SQLite
- ¿Cuál es la mejor práctica para redondear un flotador a 2 decimales?
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?