Связаны ли CMAttitude и CATransform3D матрицами вращения?

Я смотрю на основной класс движения CMAttitude, он может выражать ориентацию устройства как матрицу вращения 3x3. В то же время я взглянул на CATransform3D, который инкапсулирует позицию представления, а также масштабирование. CATransform3D - это матрица 4x4.

Я видел, что матрица вращения OpenGL имеет размер 4x4 и просто заполнена 0001 в 4-й строке и столбце.

Я не понимаю, связана ли матрица вращения CMAttitude с матрицей CATransform?

Могу ли я использовать вращение устройства в пространстве, полученное с помощью матрицы вращения, для преобразования UIView с помощью CATransform3D? Я намерен позволить пользователю перемещать телефон и применять такое же преобразование к UIView на экране.

Дополнительный вопрос: если они связаны, как преобразовать матрицу вращения CMAttitude в CATransform3D?


person Alex Stone    schedule 01.06.2012    source источник


Ответы (1)


Гироскоп используется для определения только ориентации устройства в пространстве. Существует много способов параметризации самой ориентации (см. Информацию о SO (3) для теоретической информации) - кватернионы, углы Эйлера и матрицы 3x3 являются одними из них.

«Встраивание» матрицы 3x3 в матрицу 4x4 не является специфической уловкой GL. Это "полупрямой продукт" группы переводов (которая изоморфна всем трехмерные векторы) и группу вращений (упомянутую выше SO (3)).

Чтобы получить матрицу CATransform3D из CMAttitude, вы должны предположить некоторую позицию вашего объекта. Если он равен нулю, просто добавьте в матрицу 0001, как вы сказали.

Этот вопрос может вас заинтересовать: Пример кода гироскопа Apple

person Viktor Latypov    schedule 01.06.2012
comment
Пожалуйста :) Надеюсь, ответ не слишком теоретический :) - person Viktor Latypov; 01.06.2012