¿Están CMAttitude y CATransform3D relacionados por matrices rotacionales?

Estoy mirando la class de movimiento central CMAttitude , puede express la orientación del dispositivo como una matriz rotacional 3×3. Al mismo time, he echado un vistazo a CATransform3D , que encapsula la actitud de la vista, así como la escala. El CATransform3D es una matriz 4×4.

He visto que la matriz rotativa de OpenGL es 4×4 y está simplemente 0001 acolchada en la cuarta fila y columna.

¿Estoy vagando si la matriz rotacional de CMAttitude está relacionada con la matriz de CATransform?

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

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

El giroscopio se usa para determinar solo la orientación del dispositivo en el espacio. Existen muchas forms de parametrizar la orientación en sí (ver la información sobre el grupo SO (3) para get información teórica): los cuaterniones, los angularjs de Euler y las matrices 3×3 son una de ellas.

El "empotramiento" de la matriz 3×3 en la matriz 4×4 no es un truco específico de GL. Es un "producto semidirecto" del grupo de traducciones (que es isomorfo a todos los vectores 3D) y el grupo de rotaciones (el SO (3) mencionado anteriormente).

Para get la matriz CATransform3D de CMAttitude, debe suponer alguna position de su object. Si es cero, simplemente rellene la matriz con 0001 como ya dijo.

Esta pregunta podría ser de su interés: código de ejemplo de giroscopio Apple