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, Jack B. Quaternions and Rotation Sequences: A Primer with Applications to Orbits, Aerospace and Virtual Reality. Princeton, NJ: Princeton University Press, 2007.

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

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

.
Введенный в R2019b