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?

Ejes

¿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.

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.

  • ¿Qué es el acelerómetro androide?
  • Filtrado de ruido de datos del acelerómetro
  • Manera correcta de usar SOLO Giroscopio y Acelerómetro para obtener el ángulo de corriente fiable en cualquier eje de ANDROID
  • ¿Es posible detectar movimiento cuando la pantalla está apagada?
  • La precisión del acelerómetro Xoom de Android siempre es poco fiable
  • Sensor de movimiento vertical
  • El acelerómetro detiene la entrega de muestras cuando la pantalla está apagada en Droid / Nexus One incluso con un WakeLock
  • Combine giroscopio con acelerómetro para obtener el rumbo
  • Unity3D Android acelerómetro y giroscopio controles
  • ¿Cómo determinar si un dispositivo Android tiene un acelerómetro?
  • Calcular la altura de mi teléfono
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.