Android SensorManager.java getOrientation y algoritmo getRotationMatrix

Estoy tratando de averiguar cómo getRotationMatrix() y getOrientation() funcionan exactamente.

Hasta ahora he sabido que en la función getRotationMatrix() se crossproducts el vector de gravedad con el vector magnético para obtener el nuevo vector que apunta al este. Y luego, crossproducts el vector del este con el vector de la gravedad otra vez para conseguir el vector que señala al norte magnético. Según este artículo dice, ahora tenemos tres vectores ortogonales y podemos formar una matriz de rotación.

Aquí está mi primera pregunta : ¿Por qué debemos crossproduct el vector del este con el vector de la gravedad otra vez para conseguir un vector que señala el norte magnético? ¿No es el vector magnético original que señala el norte magnético? ¿Cuál es la diferencia entre el nuevo vector y el vector magnético original?

Hablando de la getOrientation() , aquí está mi segunda pregunta : ¿cómo sale el azimut, rollo y lanzamiento? ¿Hay alguna ecuación o fórmula para la explicación?

Puede ir a este sitio web para ver el código

Muy apreciado por su atención. ¡Muchas gracias!

Primera respuesta: El vector magnético apunta (magnético) al Norte y tal vez también un poco hacia arriba o hacia abajo. El propósito del segundo producto cruzado es obtener un vector en el plano horizontal, apuntando (magnético) al Norte.

Segunda respuesta: De acuerdo con ese código, el paso de rodillo y el azimut se calculan a partir de elementos de la matriz de rotación, los cuales a su vez se derivan de componentes de los tres vectores espaciales. De un vistazo,

Tan (azimut) = M y / H y
Sin (tono) = -A y
Tan (rollo) = -A z / A x

(Si eso es suficiente respuesta depende de lo cómodo que está con trigonometría y visualización de rotaciones en 3-espacio.)

  • Detectar la orientación de un vídeo grabado en android
  • Cómo manejar la orientación del vídeo desde dispositivos móviles
  • Orientación del dispositivo Android sin geomagnética
  • Android: notifyDataSetChanged () no actualizar listview después de cambiar la orientación
  • ¿Cómo puedo especificar diferentes diseños para orientaciones de retrato y de paisaje?
  • Android Quiero obtener ángulo de rotación para el dispositivo
  • Cambio de orientación Crash Application
  • Azimut encontrado con Sensor.TYPE_MAGNETIC_FIELD mucho más inestable que Sensor.TYPE_ORIENTATION
  • Android VideoView no se reproduce Orientación de retrato
  • ¿El error de AdView causó que todas las vistas de la Web dejen de cargarse cuando cambia la orientación y se están ejecutando múltiples subprocesos?
  • Problema de orientación de la cámara en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.