2012-06-01 10 views
6

Estoy mirando la clase de movimiento del núcleo CMAttitude, puede expresar la orientación del dispositivo como una matriz de rotación de 3x3. Al mismo tiempo, he echado un vistazo al CATransform3D, que resume la actitud de la vista, así como la escala. El CATransform3D es una matriz 4x4.¿Están relacionados CMAttitude y CATransform3D por matrices rotacionales?

He visto que la matriz de rotación OpenGL es 4x4 y simplemente está rellenada 0001 en la cuarta fila y columna.

¿Estoy deambulando si la matriz de rotación de CMAttitude está relacionada con la matriz de CATransform?

¿Puedo usar la rotación del dispositivo en el espacio obtenido a través de una matriz rotativa para transformar una UIView usando CATransform3D? Mi intención es permitir que el usuario mueva el teléfono y aplicar la misma transformación a una UIView en la pantalla.

Pregunta adicional: si están relacionadas, ¿cómo transformo la matriz rotativa de CMAttitude en CATransform3D?

Respuesta

4

El giroscopio se utiliza para determinar solo la orientación del dispositivo en el espacio. Hay muchas formas de parametrizar la orientación en sí (consulte la información sobre el grupo SO(3) para obtener información teórica): los cuaterniones, los ángulos de Euler y las matrices 3x3 son uno de ellos.

La "incrustación" de la matriz 3x3 en la matriz 4x4 no es un truco específico de GL. Es un "semi-direct product" del grupo de traducciones (que es isomorfo a todos los vectores 3D) y el grupo de rotaciones (el SO (3) mencionado anteriormente).

Para obtener la matriz CATransform3D de CMAttitude, debe suponer alguna posición de su objeto. Si es cero, simplemente rellene la matriz con 0001 como ha dicho.

Esta pregunta podría ser de interés para usted: Apple gyroscope sample code

+0

Gracias por una gran respuesta informativo! –

+0

De nada :) Espero que la respuesta no sea demasiado teórica :) –

Cuestiones relacionadas