rotmat

转换四元数旋转矩阵

描述

例子

rotationMatrix= rotmat (皮疹,rotationType)将四元数,皮疹,转换为等效的旋转矩阵表示。

例子

全部折叠

定义用于点旋转的四元数。

θ= 45;γ= 30;皮疹=四元数([0,θ,γ],“eulerd”,“ZYX股票”,“点”)
皮疹=四元数0.8924 + 0.23912i + 0.36964j + 0.099046k

将四元数转换为旋转矩阵。

rotationMatrix = rotmat(季,“点”)
rotationMatrix =3×30.7071 -0.0000 0.7071 0.3536 0.8660 -0.3536 -0.6124 0.5000 0.6124

要验证旋转矩阵,直接创建两个旋转矩阵对应于关于的旋转y- 和x相互重合。将旋转矩阵相乘并与输出进行比较rotmat

θ= 45;γ= 30;ry = [cosd() 0 sind();0 1 0;信德(θ)0 cosd(θ)];rx = [1 0 0;0 cosd(gamma) -sind(gamma);0信德(γ)cosd(γ)];rotationMatrixVerification = rx *
rotationMatrixVerification =3×30.7071 0 0.7071 0.3536 0.8660 -0.3536 -0.6124 0.5000 0.6124

定义的框架旋转使用四元数。

θ= 45;γ= 30;皮疹=四元数([0,θ,γ],“eulerd”,“ZYX股票”,“帧”)
皮疹=四元数0.8924 + 0.23912i + 0.36964j - 0.099046k

将四元数转换为旋转矩阵。

rotationMatrix = rotmat(季,“帧”)
rotationMatrix =3×30.7071 -0.0000 -0.7071 0.3536 0.8660 0.3536 0.6124 -0.5000 0.6124

要验证旋转矩阵,直接创建两个旋转矩阵对应于关于的旋转y- 和x相互重合。将旋转矩阵相乘并与输出进行比较rotmat

θ= 45;γ= 30;ry = [cosd() 0 -sind();0 1 0;信德(THETA)0 COSD(THETA)];rx = [1 0 0;0 COSD(伽马)信德(伽马);0 -sind(伽马)COSD(伽马)];rotationMatrixVerification = rx *
rotationMatrixVerification =3×30.7071 0 -0.7071 0.3536 0.8660 0.3536 0.6124 -0.5000 0.6124

创建一个3×1归一化的四元数矢量。

qVec =正常化(四元数(randn (3、4)));

将四元数数组转换为旋转矩阵。的页面rotmatArray的线性指标qVec

rotmatArray = rotmat (qVec,“帧”);

假设qVecrotmatArray对应于一系列的旋转。将四元数旋转组合成单个表示,然后将四元数旋转应用于任意初始化的笛卡尔坐标点。

loc =正常化(randn (1、3));皮疹= prod (qVec);rotateframe(皮疹、loc)
ans =1×30.9524 0.5297 0.9013

将旋转矩阵合并成一个单一的表示法,然后将旋转矩阵应用于相同的初始笛卡尔坐标点。验证四元数旋转和旋转矩阵的结果具有相同的方向。

totalRotMat =眼(3);i = 1:size(rotmatArray,3) totalRotMat = rotmatArray(:,:,i)*totalRotMat;结束totalRotMat * loc”
ans =3×10.9524 0.5297 0.9013

输入参数

全部折叠

四元数转换,指定为标量、向量、矩阵或多维数组。

数据类型:四元数

旋转的类型来表示由rotationMatrix输出指定为“帧”要么“点”

数据类型:烧焦|字符串

输出参数

全部折叠

旋转矩阵表示,以3×3矩阵或3×3×-的形式返回N多维数组。

  • 如果皮疹是一个标量,rotationMatrix返回为一个3×3矩阵。

  • 如果皮疹是非标量,rotationMatrix是3乘3乘-N多维数组,rotationMatrix(:,:,我)是对应于旋转矩阵皮疹(我)

旋转矩阵的数据类型与的基础数据类型相同皮疹

数据类型:|

算法

给定一个四元数的形式

= 一个 + b + c j + d k ,

定义了帧旋转的等效旋转矩阵为

( 2 一个 2 1 + 2 b 2 2 b c + 2 一个 d 2 b d 2 一个 c 2 b c 2 一个 d 2 一个 2 1 + 2 c 2 2 c d + 2 一个 b 2 b d + 2 一个 c 2 c d 2 一个 b 2 一个 2 1 + 2 d 2 ]

对于旋转点的等效旋转矩阵是帧旋转矩阵的转置:

( 2 一个 2 1 + 2 b 2 2 b c 2 一个 d 2 b d + 2 一个 c 2 b c + 2 一个 d 2 一个 2 1 + 2 c 2 2 c d 2 一个 b 2 b d 2 一个 c 2 c d + 2 一个 b 2 一个 2 1 + 2 d 2 ]

参考

[1] Kuipers, Jack B。四元数和旋转序列:轨道,航空航天和虚拟现实的应用入门。普林斯顿,新泽西州:普林斯顿大学出版社,2007年。

扩展功能

C / c++代码生成
生成使用MATLAB®编码器™C和C ++代码。

介绍了R2020a