rotmat

Преобразуйте кватернион в матрицу вращения

Описание

пример

rotationMatrix = rotmat(quat,rotationType) преобразует кватернион, quat, к эквивалентному матричному представлению вращения.

Примеры

свернуть все

Задайте кватернион для использования во вращении точки.

theta = 45;
gamma = 30;
quat = quaternion([0,theta,gamma],'eulerd','ZYX','point')
quat = quaternion
       0.8924 +  0.23912i +  0.36964j + 0.099046k

Преобразуйте кватернион в матрицу вращения.

rotationMatrix = rotmat(quat,'point')
rotationMatrix = 3×3

    0.7071   -0.0000    0.7071
    0.3536    0.8660   -0.3536
   -0.6124    0.5000    0.6124

Чтобы проверить матрицу вращения, непосредственно создайте две матрицы вращения, соответствующие вращениям вокруг y-и осей X. Умножьте матрицы вращения и сравните с выходом rotmat.

theta = 45;
gamma = 30;

ry = [cosd(theta)   0           sind(theta) ; ...
      0             1           0           ; ...
     -sind(theta)   0           cosd(theta)];
 
rx = [1             0           0           ;      ...
      0             cosd(gamma) -sind(gamma) ;     ...
      0             sind(gamma) cosd(gamma)];

rotationMatrixVerification = rx*ry
rotationMatrixVerification = 3×3

    0.7071         0    0.7071
    0.3536    0.8660   -0.3536
   -0.6124    0.5000    0.6124

Задайте кватернион для использования во вращении системы координат.

theta = 45;
gamma = 30;
quat = quaternion([0,theta,gamma],'eulerd','ZYX','frame')
quat = quaternion
       0.8924 +  0.23912i +  0.36964j - 0.099046k

Преобразуйте кватернион в матрицу вращения.

rotationMatrix = rotmat(quat,'frame')
rotationMatrix = 3×3

    0.7071   -0.0000   -0.7071
    0.3536    0.8660    0.3536
    0.6124   -0.5000    0.6124

Чтобы проверить матрицу вращения, непосредственно создайте две матрицы вращения, соответствующие вращениям вокруг y-и осей X. Умножьте матрицы вращения и сравните с выходом rotmat.

theta = 45;
gamma = 30;

ry = [cosd(theta)   0           -sind(theta) ; ...
      0             1           0           ; ...
     sind(theta)   0           cosd(theta)];
 
rx = [1             0           0           ;      ...
      0             cosd(gamma) sind(gamma) ;     ...
      0             -sind(gamma) cosd(gamma)];

rotationMatrixVerification = rx*ry
rotationMatrixVerification = 3×3

    0.7071         0   -0.7071
    0.3536    0.8660    0.3536
    0.6124   -0.5000    0.6124

Создайте нормированный вектор кватерниона 3 на 1.

qVec = normalize(quaternion(randn(3,4)));

Преобразуйте массив кватерниона в матрицы вращения. Страницы rotmatArray соответствуйте линейному индексу qVec.

rotmatArray = rotmat(qVec,'frame');

Примите qVec и rotmatArray соответствуйте последовательности вращений. Объедините вращения кватерниона в одно представление, затем примените вращение кватерниона к произвольно инициализированным Декартовым точкам.

loc = normalize(randn(1,3));
quat = prod(qVec);
rotateframe(quat,loc)
ans = 1×3

    0.9524    0.5297    0.9013

Объедините матрицы вращения в одно представление, затем примените матрицу вращения к тем же начальным Декартовым точкам. Проверьте матричный результат вращения и вращения кватерниона в той же ориентации.

totalRotMat = eye(3);
for i = 1:size(rotmatArray,3)
    totalRotMat = rotmatArray(:,:,i)*totalRotMat;
end
totalRotMat*loc'
ans = 3×1

    0.9524
    0.5297
    0.9013

Входные параметры

свернуть все

Кватернион, чтобы преобразовать в виде скаляра, вектора, матрицы или многомерного массива.

Типы данных: quaternion

Тип вращения представлен rotationMatrix выведите в виде 'frame' или 'point'.

Типы данных: char | string

Выходные аргументы

свернуть все

Матричное представление вращения, возвращенное как 3х3 матрица или 3 3 N многомерным массивом.

  • Если quat скаляр, rotationMatrix возвращен как 3х3 матрица.

  • Если quat является нескалярным, rotationMatrix возвращен как 3 3 N многомерным массивом, где rotationMatrix(:,:,i) матричное соответствие вращения quat(i).

Тип данных матрицы вращения совпадает с базовым типом данных quat.

Типы данных: single | double

Алгоритмы

Учитывая кватернион формы

q=a+bi+cj+dk,

эквивалентная матрица вращения для вращения системы координат задана как

[2a21+2b22bc+2ad2bd2ac2bc2ad2a21+2c22cd+2ab2bd+2ac2cd2ab2a21+2d2].

Эквивалентная матрица вращения для вращения точки является транспонированием матрицы вращения системы координат:

[2a21+2b22bc2ad2bd+2ac2bc+2ad2a21+2c22cd2ab2bd2ac2cd+2ab2a21+2d2].

Ссылки

[1] Kuipers, Джек Б. Кватернионы и последовательности вращения: краткая информация с приложениями к орбитам, космосу и виртуальной реальности. Принстон, NJ: Издательство Принстонского университета, 2007.

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Введенный в R2020a