Преобразуйте кватернион в матрицу вращения
преобразует кватернион, 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
quat — Кватернион, чтобы преобразоватьКватернион, чтобы преобразовать, заданный как скаляр, вектор, матрица или многомерный массив.
Типы данных: quaternion
rotationType — Тип или вращение'frame' | 'point'Тип вращения представлен rotationMatrix выведите, заданный как 'frame' или 'point'.
Типы данных: char | string
rotationMatrix — Матричное представление вращенияМатричное представление вращения, возвращенное как 3х3 матрица или 3 3 N многомерным массивом.
Если quat скаляр, rotationMatrix возвращен как 3х3 матрица.
Если quat является нескалярным, rotationMatrix возвращен как 3 3 N многомерным массивом, где rotationMatrix(:,:,i) матричное соответствие вращения quat(i).
Тип данных матрицы вращения совпадает с базовым типом данных quat.
Типы данных: single | double
Учитывая кватернион формы
эквивалентная матрица вращения для вращения системы координат задана как
Эквивалентная матрица вращения для вращения точки является транспонированием матрицы вращения системы координат:
[1] Kuipers, Джек Б. Кватернионы и последовательности вращения: краткая информация с приложениями к орбитам, космосу и виртуальной реальности. Принстон, NJ: Издательство Принстонского университета, 2007.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.