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.
- Aplicar una animación a varias vistas al mismo tiempo
- OCR (tesseract), rotación inteligente para la imagen
- EditText duplicado en rotación
- Cuando giro la imagen a 45 grados de superposición que sale de los límites en android
- Cómo hacer menú giratorio
- Android, ayuda a girar la imagen en el tacto
- Androide ImageView una rotación de dedo
- Android - ¿Cómo diseñar un tipo de diseño de Rotary Dialer / Rotary Dialer?
- Algunos fragmentos se pierden en rotación
- Cómo girar un icono de Android en su punto central?
- Rotar la imagen en el centro no va lisa (Monodroid)
- -webkit-transform no funciona en la vista web de Android
- Rotar ImageView en Android <Nivel de API 11
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 lasclockwise
delclockwise
(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
lasclockwise
o si están enanticlockwise
.
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)
- setSelection no funciona – getSelectedItemPosition siempre devuelve -1
- Cómo obtener una vista desde un evento de coordenadas en android cuando la vista establecer la rotación?