Detectar algoritmo de giro de 360 ​​grados

Estoy detectando con éxito 0-360 grados de rotación (rollo) de teléfono alrededor de un eje, pero ahora estoy teniendo dificultades para diseñar un algoritmo eficaz para detectar una vuelta completa. Mi trabajo, pero creo que no elegante y tan eficaz algoritmo como me gustaría es:

private boolean detectRoll; private boolean[] checkpointsR = new boolean[4]; private boolean fullRollTurn; public void detectingRoll() { setDetectRoll(true); checkpointsR[0] = true; for (int i = 1; i < 4; i++) { if (roll > 90 * i && roll < 90 * (i + 1) && checkpointsR[i - 1] == true) { checkpointsR[i] = true; } } if (areAllTrue(checkpointsR) && roll > 0 && roll < 45) { fullRollTurn = true; // reset rollCheckpoints for (int i = 1; i < 4; i++) { checkpointsR[i] = false; } } } public static boolean areAllTrue(boolean[] array) { for (boolean b : array) if (!b) return false; return true; } public void setDetectRoll(boolean detectRoll) { this.detectRoll = detectRoll; } 

Cualquier ayuda sería muy apreciada.

Bueno, su código sólo detecta las vueltas que resultan del aumento de roll . En la otra dirección, es decir, un giro resultante de la caída del roll ,

  if (checkpointsR[i - 1] == true) { checkpointsR[i] = true; } 

nunca disparará.

Si bien eso es fácil de solucionar, si la única entrada de sensor que tienes es roll , el punto de control fijo es el enfoque siempre va a tener problemas. La mejor manera de visualizarlo es que sus puntos de control son pequeños puntos rojos en un círculo, y la rotación del teléfono corresponde a una hormiga que se arrastra alrededor del borde del círculo. Supongamos que cuando la hormiga pasa un punto, se vuelve verde, y esto representa que el punto de control se establece en true . Si la hormiga comienza entre dos puntos de control A y B , puede "engañarlos" arrastrándose por B , todo el camino a A , y luego darse la vuelta y dirigir la otra manera de nuevo. Todos los puntos de control serán verdes, pero la hormiga no habrá completado un círculo completo.

La manera de resolver esto es cambiar dos cosas: en primer lugar, dar a los puestos de control tres estados: unvisited , en clockwise y anticlockwise . En segundo lugar, iniciar la hormiga en la parte superior de un puesto de control .

Aquí están las nuevas reglas:

  • Cada punto comienza como unvisited (un punto rojo).
  • Si la hormiga pasa un punto de control en el sentido de las agujas del reloj, ajuste su estado en el clockwise de las clockwise del clockwise (una pequeña flecha verde apuntando en sentido horario desde el punto)
  • Si la hormiga pasa un punto de control en el sentido contrario al de las agujas del reloj, ajuste su estado en anticlockwise (una pequeña flecha verde apuntando en sentido antihorario desde el punto)
  • Se ha completado un giro si todos los puntos de control están en el clockwise las clockwise o si están en anticlockwise .

Esto se puede lograr con tres puntos de control, y se coloca donde quiera en el círculo, siempre y cuando el primero está bajo la posición inicial de la hormiga. Sin embargo, recomiendo {initial, inital + 120, initial + 240} por simetría.

(El experimento de pensamiento de hormigas funciona con dos puntos de control, pero cuando tienes dos puntos de control el problema es que hay un par de regiones con un punto de control no único entre ellos, lo que confunde la detección de qué punto de control pasó la hormiga cuando la hormiga va de una región a otra)

  • OnCreate no se llama cuando la pantalla gira - Android
  • Gire ImageView en Android en un punto fijo con RotateAnimation
  • Cómo rotar un rectángulo dibujado en lienzo en Android?
  • Uso de Matrix. Rotar en OpenGL ES 2.0
  • Cómo rotar un dibujable por ObjectAnimator?
  • Android: orientación de la vista previa de la cámara en modo vertical
  • Android: obtiene la orientación del dispositivo desde Azimuth, roll y pitch
  • Imagen fuera de límites después de la transformación en la vista
  • Después de la rotación de la pantalla, se cambiará el idioma de mi aplicación
  • Cómo deshabilitar / evitar Fragment animaciones personalizadas después de la rotación de la pantalla
  • Android: Activa el estado de rotación del acelerómetro
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.