Связаны ли CMAttitude и CATransform3D вращательными матрицами?
Я смотрю на основной класс движения CMAttitude
, он может выразить ориентацию устройства в виде вращательной матрицы 3x3. В то же время я взглянул на CATransform3D
, который инкапсулирует отношение представления, а также масштабирование. CATransform3D
- это матрица 4x4.
Я видел, что вращательная матрица OpenGL имеет размер 4x4 и просто заполняется 0001 в 4-й строке и столбце.
Я блуждаю, связана ли вращательная матрица CMAttitude с матрицей CATransform?
Может Я использую вращение устройства в пространстве, полученное с помощью вращательной матрицы, для преобразования UIView с помощью CATransform3D
? Мое намерение состоит в том, чтобы позволить пользователю переместить телефон и применить то же преобразование к UIView на экране.
Бонусный вопрос: если они связаны, как преобразовать вращательную матрицу CMAttitude в CATransform3D?
1 ответ:
Гироскоп используется для определениятолько ориентации устройства в пространстве. Существует много способов параметризации самой ориентации (см. информацию о группе SO(3) для теоретической информации) - кватернионы, углы Эйлера и матрицы 3x3 являются одним из них.
"встраивание" матрицы 3x3 в матрицу 4x4 не является специфичным для GL трюком. Это "полупрямое произведение" группы переводов (которая изоморфна всем трехмерным векторам) и группа вращений (SO (3), упомянутая выше).
Чтобы получить матрицу CATransform3D из CMAttitude, вы должны предположить некоторое положение вашего объекта. Если он равен нулю, то просто заполните матрицу с 0001, как вы сказали.
Этот вопрос может представлять для вас интерес: пример кода Apple gyroscope