Cómo medir la inclinación del teléfono en el plano XY usando acelerómetro en Android
He intentado utilizar los datos del eje Z de SensorEvent.values, pero no detecta la rotación de mi teléfono en el plano XY, es decir. Alrededor del eje Z.
Estoy utilizando esto como una referencia para los ejes de coordenadas. ¿Es correcto?
- Diferentes valores de acelerómetros en varios dispositivos
- Cómo calcular la velocidad de carrera utilizando sensor acelerómetro en android
- Cómo obtener tiempo si alguna condición se reunió como giroscopio de lectura
- Detección de datos periódicos desde el acelerómetro del teléfono
- Calcular el ángulo del teléfono (Android)
¿Cómo puedo medir ese movimiento usando valores de acelerómetro?
Estos juegos hacen algo similar: Extreme Skater , Doodle Jump.
PS: mi orientación del teléfono será paisaje.
- ¿Cómo puedo simular el acelerómetro en el emulador de Android?
- Detección de la orientación del dispositivo
- El evento Shake funciona de forma diferente en varios dispositivos Implementación personalizada Shake Event
- ¿Cómo es posible que la aplicación Google Fit mide el número de pasos todo el tiempo sin drenar la batería?
- Android Gyroscope versículo Acelerómetro
- ¿Qué teléfonos Android por ahí tienen un giroscopio?
- Android acelerómetro, uso de sensores y consumo de energía
- Obtener rotación y mostrar en grados
Esencialmente, hay 2 casos aquí: el dispositivo está colocando plano y no plano. El plano aquí significa que el ángulo entre la superficie de la pantalla del dispositivo y el plano xy del mundo (lo llamo la inclinación) es menos de 25 grados o más grande que 155 grados. Piense en el teléfono tumbado o inclinado un poco de la mesa.
Primero necesita normalizar el vector del acelerómetro.
Es decir, si g es el vector que devuelve los valores del evento del sensor del acelerómetro. En codigo
float[] g = new float[3]; g = event.values.clone(); double norm_Of_g = Math.sqrt(g[0] * g[0] + g[1] * g[1] + g[2] * g[2]); // Normalize the accelerometer vector g[0] = g[0] / norm_Of_g g[1] = g[1] / norm_Of_g g[2] = g[2] / norm_Of_g
Entonces la inclinación se puede calcular como
int inclination = (int) Math.round(Math.toDegrees(Math.acos(g[2])));
Así
if (inclination < 25 || inclination > 155) { // device is flat } else { // device is not flat }
Para el caso de la colocación plana, usted tiene que utilizar una brújula para ver cuánto el dispositivo está girando desde la posición inicial.
Para el caso de no plano, la rotación (inclinación) se calcula como sigue
int rotation = (int) Math.round(Math.toDegrees(Math.atan2(g[0], g[1])));
Ahora rotación = 0 significa que el dispositivo está en posición normal. Eso es retrato sin ninguna inclinación para la mayoría del teléfono y probablemente el paisaje para la tableta. Así que si usted tiene un teléfono como en la imagen de arriba y empezar a girar, la rotación cambiará y cuando el teléfono está en el paisaje de la rotación será 90 o -90 depende de la dirección de rotación.
- ¿Cuál es la diferencia entre la imagen del sistema de Intel x86 átomo vs Google API (imagen del sistema x86)
- ¿Es Fragment.setUserVisibleHint () llamado por el sistema androide?