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


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

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

Я блуждаю, связана ли вращательная матрица CMAttitude с матрицей CATransform?

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

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

1 6

1 ответ:

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

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

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

Этот вопрос может представлять для вас интерес: пример кода Apple gyroscope