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)

  • Rotación de imagen con opencv en android corta los bordes de una imagen
  • Estoy tratando de rotar imagebutton a 360 haciendo clic en él, pero no se puede girar?
  • Saber cuándo se ha terminado la rotación usando setRequestedOrientation
  • Rotar correctamente las imágenes web utilizando Picasso de Square
  • RotateAnimation sin duración
  • Rotación de 90 grados en la vista web de FrameLayout en Android
  • Cómo rotar un lienzo en un punto específico usando android.graphics.Camera.rotateX (angle)
  • Cómo manejar la rotación con Retrofit y RxJava / RxAndroid en Actividad?
  • Android: screenOrientation = "sensorPortrait" no funciona en API +17
  • Uso de Matrix. Rotar en OpenGL ES 2.0
  • Android: orientación de la vista previa de la cámara en modo vertical
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.