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.

One Solution collect form web for “Detectar algoritmo de giro de 360 ​​grados”

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)

  • La rotación de Css no se aplica en android (phonegap)
  • SetRotationY () width API10 en Android
  • LibGDX 1.5 girando sprite alrededor de su centro
  • ¿Por qué se rota una imagen capturada con la intención de la cámara en algunos dispositivos de Android?
  • Android Rotación de MapView
  • Fragmentos de Android que conservan datos
  • Cambiar entre las cámaras frontal y posterior
  • Aplicar una animación a varias vistas al mismo tiempo
  • Cómo hacer menú giratorio
  • La orientación del grabador de vídeo JavaCV no es adecuada en modo retrato
  • Dibujar el texto verticalmente sobre lienzo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.