主要内容

四元素

创建四元数阵列

描述

四元数是三维超复数,用于三维旋转和方向。

四元数用这种形式表示 一种 + B. 一世 + C j + D. K. , 在哪里一种B.C,D.零件是真实数字,我,j和k是基础元素,满足方程式:一世2j =2= k2= IJK = -1

这组四元数,表示为H,在真实数字的四维矢量空间内定义,R.4.。每个元素H基于基本元素,i,j和k的线性组合具有独特的表示。

3-D中的所有旋转可以通过旋转轴和围绕该轴的角度来描述。旋转矩阵上的四元数的优点是轴和旋转角度易于解释。例如,考虑一个点R.3.。要旋转点,请定义旋转轴和旋转角度。

旋转的四元数表示可以表示为 问: = 因为 θ. 2 + θ. 2 B. 一世 + C j + D. K. , 在哪里θ.是旋转角度和[B.C,D.]是旋转轴。

创建

描述

例子

皮疹= Quaternion()创建一个空的四元数。

例子

皮疹=四元数(A B C D创建四元数阵列,其中四个四元数零件取自阵列一种B.C,D.。所有输入必须具有相同的大小并具有相同的数据类型。

例子

皮疹=四元数(矩阵创造一个N- 来自1的1个四元数数组N-4矩阵,其中每列成为四元数的一部分。

例子

皮疹=四元数(RV.,'rotvec')创造一个N- 来自1的1个四元数数组N- 3旋转矢量矩阵,RV.。每一排RV.表示弧度中的旋转矢量。

例子

皮疹=四元数(RV.,'rotvecd')创造一个N- 来自1的1个四元数数组N- 3旋转矢量矩阵,RV.。每一排RV.表示旋转矢量以度为单位。

例子

皮疹=四元数(R M,'rotmat',PF创造一个N-1×3-逐个的1个四元数阵列 -N旋转矩阵数组,R MPF可以是'观点'如果欧拉角表示点旋转或'框架'用于框架旋转。

例子

皮疹=四元数(E.,'euler',卢比PF创造一个N-by-1四元数数组N-By-3矩阵,E.。每一排E.表示弧度中的一组欧拉角。角度E.是依次绕轴的旋转卢比

例子

皮疹=四元数(E.,'eulerd',卢比PF创造一个N-by-1四元数数组N-By-3矩阵,E.。每一排E.表示一组以度为单位的欧拉角。角度E.是依次绕轴的旋转卢比

输入参数

展开全部

四元数的一部分,指定为四个以逗号分隔的标量、矩阵或相同大小的多维数组。

例子:quat =四元素(1,2,3,4)创建形式为1 + 2i + 3j + 4k的四元数。

例子:quat =四元素([1,5],[2,6],[3,7],[4,8])创建一个1×2四元数阵列Quat (1,1) = 1 + 2i + 3j + 4kquat(1,2)= 5 + 6i + 7j + 8k

数据类型:单身的|双倍的

四元零件矩阵,指定为一个N4矩阵。每一行代表一个单独的四元数。每一列代表一个单独的四元数部分。

例子:quat =四元数(兰特(10,4))创建一个10×1个四元数阵列。

数据类型:单身的|双倍的

旋转矢量矩阵,指定为N3矩阵。每一排RV.表示旋转向量的[x y z]元素。旋转矢量是表示旋转轴线的单位矢量,其通过弧度或度的旋转角度缩放。

要使用此语法,请将第一个参数指定为旋转向量的矩阵和第二个参数'rotvec'“rotvecd”

例子:quat =四元数(rand(10,3),'rotvec')创建一个10×1个四元数阵列。

数据类型:单身的|双倍的

旋转矩阵数组,由3×3矩阵指定或3×3逐个指定N大批。数组的每个页面表示单独的旋转矩阵。

例子:皮疹=四元数(兰德(3),“rotmat”,“点”)

例子:皮疹=四元(兰特(3),'rotmat','frame')

数据类型:单身的|双倍的

旋转矩阵类型,由'观点''框架'

例子:皮疹=四元数(兰德(3),“rotmat”,“点”)

例子:皮疹=四元(兰特(3),'rotmat','frame')

数据类型:char|细绳

欧拉角的矩阵,由AN指定N3矩阵。如果使用'euler'语法,指定E.在弧度。如果使用'eulerd'语法,指定E.程度。

例子:皮疹=四元数(E.,'euler','yzy','point')

例子:皮疹=四元数(E.,'euler','xyz','frame')

数据类型:单身的|双倍的

旋转序列,指定为三元素字符向量:

  • 'yzy'

  • 'yxy'

  • 之一的ZYZ”

  • “ZXZ”

  • 'xyx'

  • 'xzx'

  • 'XYZ'

  • 'yzx'

  • “ZXY”

  • 'xzy'

  • 'Zyx'

  • “YXZ”

假设您希望在使用帧旋转旋转坐标系时确定点的新坐标。该点在原始坐标系中定义为:

点= [SQRT(2)/ 2,SQRT(2)/ 2,0];
在这个表示中,第一列表示X-axis,第二列代表y-axis,第三列代表Z.-轴。

你想用欧拉角表示旋转点[45,45,0]。使用两个不同的旋转序列旋转点:

  • 如果您创建四元数旋转器并指定“ZYX”序列,则框架首先旋转45°Z.-axis,然后在新的45°y-轴。

    quatrootator =四元数([45,45,0],'eulerd''Zyx''框架');newpointoorder = rotateframe(标准电罩,点)
    newpointoorder = 0.7071 -0.0000 0.7071

  • 如果创建四元数旋转器并指定“YZX”序列,则框架首先旋转45°y-axis,然后在新的45°Z.-轴。

    quatrootator =四元数([45,45,0],'eulerd''yzx''框架');newpointoorder = rotateframe(标准电罩,点)
    newpointoordort = 0.8536 0.1464 0.5000

数据类型:char|细绳

对象功能

ang 四元数阵列的角速度
针对者 四元数内零件的类别
袖珍的 将四元数阵列转换为N-By-4矩阵
连同 季芯的复杂共轭
ctranspose,' Quation0阵列的复杂共轭转换
经销 角距离,以弧度为单位
欧莱尔 将四元数转换为欧拉角(弧度)
eulerd. 将四元数转换为欧拉角度(度)
经验值 四元数阵列的指数
ldivide,。\ 元素 - 典型的四元数左部
日志 四元数阵列的自然对数
意思 四元数是指旋转
- - - - - - - 四元数减法
mtimes,* 四元数乘法
规范 四元数规范
正常化 四元数正常化
那些 使用设置为零的一个和虚部的真实部件创建四元数阵列
部分 提取四元素部分
电力,。^ 元素 - 典型的四元音力量
prod 四元数数组的乘积
randrot 均匀分布的随机旋转
Rdivide,./ 元素 - 聪明的四元数权利
旋转框架 四元数帧旋转
rotatepoint 四元数点旋转
罗马 转换四元数到旋转矩阵
Rotvec. 将四元数转换为旋转向量(弧度)
rotvecd. 将四元数转换为旋转矢量(度)
sl 球形线性插值
次,. * 元素 - 典型四元数乘法
转置”, 转换四元数阵列
uminus, - 四分之一偶然减去
Zeros. 创建四元数数组,所有部分设置为零

例子

全部折叠

quat = quaternion()
quat = 0x0空四元数阵列

默认情况下,四元数的基础类是一个double。

分册(QUAT)
ans =“双”

您可以通过将四个部分指定为逗号分隔的标量,矩阵或相同大小的多维数组来创建四元数阵列。

将四元数部分定义为标量。

一个= 1.1;B = 2.1;C = 3.1;D = 4.1;quatScalar =四元数(A, B, C, D)
Quatscalar =四元素1.1 + 2.1i + 3.1j + 4.1k

将四元数零件定义为列向量。

a = [1.1; 1.2];B = [2.1; 2.2];c = [3.1; 3.2];d = [4.1; 4.2];Quatvector =四元数(A,B,C,D)
quatvector =2×1四元数阵列1.1 + 2.1i + 3.1j + 4.1k 1.2 + 2.2i + 3.2j + 4.2k

将四元数零件定义为矩阵。

a = [1.1,1.3;......1.2、1.4);B = [2.1, 2.3;......2.2,2.4];c = [3.1,3.3;......3.2,3.4];d = [4.1,4.3;......4.2、4.4);quatMatrix =四元数(A, B, C, D)
Quatmatrix =2×2四元数阵列1.1 + 2.1i + 3.1j + 4.1k 1.3 + 2.3i + 3.3j + 4.3k 1.2 + 2.2i + 3.2j + 4.2k 1.4 + 2.4i + 3.4j + 4.4k

将四元零件定义为三维阵列。

a = randn(2,2,2);B =零(2,2,2);C =零(2,2,2);d =零(2,2,2);quatmultidimarray =四元数(a,b,c,d)
quatmultidimarray =2 x2x2四元数的数组quatMultiDimArray (:: 1) = 0.53767 + 0 + 0 j + 0 k -2.2588 + 0 + 0 j + 0 k 1.8339 + 0 + 0 j + 0 k 0.86217 + 0 + 0 j + 0 k quatMultiDimArray (:,: 2) = 0.31877 + 0 + 0 j + 0 k -0.43359 + 0 + 0 j + 0 k -1.3077 + 0 + 0 j + 0 k 0.34262 + 0 + 0 j + 0 k

可以通过指定一个N四元数部分的- × 4矩阵,其中列对应于四元数部分A、B、C和D。

创建随机四分之一的列向量。

quatparts = rand(3,4)
quatparts =3×40.8147 0.9134 0.2785 0.9649 0.9058 0.6324 0.5469 0.1576 0.1270 0.0975 0.9575 0.9706
皮疹=四元数(quatParts)
quat =3×1四元轴数组0.81472 + 0.91338I + 0.2785J + 0.96489K 0.90579 + 0.63236I + 0.54688 + 0.54688J + 0.15761K 0.12699 + 0.09754I + 0.95751J + 0.97059K

检索Quatparts.矩阵从四元数表示,使用袖珍的

RetertionQuatparts = Compact(Quat)
Reterigedquatparts =3×40.8147 0.9134 0.2785 0.9649 0.9058 0.6324 0.5469 0.1576 0.1270 0.0975 0.9575 0.9706

你可以创建一个N通过指定一个 - 1个四元数阵列N- 在弧度或度数中的3个旋转矢量矩阵。旋转向量是紧凑的空间表示,其具有与归一化四元数的一对一关系。

弧度旋转矢量

使用旋转向量创建标量季芯,并验证生成的四元数是否归一化。

rotationVector = (0.3491, 0.6283, 0.3491);quat =四元轴(旋转矢量,'rotvec'
quat =四元素0.92124 + 0.16994i + 0.30586J + 0.16994K
规范(皮疹)
ans = 1.0000.

您可以将四季度转换为弧度的旋转向量使用Rotvec.函数。恢复旋转矢量从四元素,皮疹

RotVec(Quat)
ans =1×30.3491 0.6283 0.3491

旋转向量以度为单位

使用旋转向量创建标量季芯,并验证生成的四元数是否归一化。

RotationVector = [20,36,20];quat =四元轴(旋转矢量,“rotvecd”
quat =四元素0.92125 + 0.16993i + 0.30587J + 0.16993K
规范(皮疹)
ans = 1

您可以使用季度转换为使用的旋转向量rotvecd.函数。恢复旋转矢量从四元素,皮疹

RotVecd(Quat)
ans =1×320.0000 36.0000 20.0000

您可以通过指定3×3-3-n旋转矩阵来创建n个逐个四元数阵列。旋转矩阵数组的每个页面对应于四元数阵列的一个元素。

使用3×3旋转矩阵创建标量季芯。指定旋转矩阵是否应作为帧或点旋转解释。

RotationMatrix = [1 0 0;......0倍根号(3)/ 2 0.5;......0 -0.5 SQRT(3)/ 2];quat =四元数(RotationMatrix,'rotmat''框架'
quat =四元素0.96593 + 0.25882i + 0J + 0k

您可以使用QuationSnions转换为旋转矩阵罗马函数。恢复RotationMatrix.从四元素,皮疹

rotmat(皮疹,'框架'
ans =3×31.0000 0 0 0 0.8660 0.5000 0 -0.5000 0.8660

你可以创建一个N通过指定一个 - 1个四元数阵列N- 在弧度或度数中的3个欧拉角度。

用弧度表示的欧拉角

使用欧莱尔语法,使用欧拉角(以弧度为单位)的1 × 3向量创建标量四元数。指定欧拉角的旋转顺序,以及这些角是代表坐标系旋转还是点旋转。

E = [PI / 2,0,PI / 4];皮疹=四元数(E,'euler''Zyx''框架'
quat =四元素0.65328 + 0.2706i + 0.2706J + 0.65328K

您可以使用四季度转换为euler角度欧莱尔函数。求出欧拉角,E.,从四元数,皮疹

欧拉(QUAT,'Zyx''框架'
ans =1×31.5708 0 0.7854

欧拉角度为程度

使用eulerd.语法使用度数为1×3欧拉角度的欧拉角度来创建标量季度。指定欧拉角的旋转顺序,以及这些角是代表坐标系旋转还是点旋转。

E = (90 0, 45);皮疹=四元数(E,'eulerd''Zyx''框架'
quat =四元素0.65328 + 0.2706i + 0.2706J + 0.65328K

你可以把四元数转换成欧拉角的角度eulerd.函数。求出欧拉角,E.,从四元数,皮疹

eulerd(皮疹,'Zyx''框架'
ans =1×390.0000 0 45.0000

四元数在真实数字上形成一个非容性联想代数。此示例说明了四元数代数的规则。

加减

四元增减和减法部分逐个发生,并进行换向:

Q1 =四元素(1,2,3,4)
Q1 =四元素1 + 2i + 3j + 4k
Q2 =四元数(9、8、7、6)
Q2 =四元素9 + 8i + 7j + 6k
q1plusq2 = q1 + q2
q1plusq2 =四元素10 + 10i + 10J + 10k
Q2PLUSQ1 = Q2 + Q1
Q2plusQ1 =四元素10 + 10i + 10J + 10k
Q1minusq2 = Q1  -  Q2
Q1minusq2 =四元素-8 - 6i - 4j - 2k
Q2minusq1 = Q2  -  Q1
Q2minusQ1 =四元素8 + 6i + 4J + 2K

您还可以执行实际数字和四元数的添加和减法。四元素的第一部分被称为真正的部分,而第二,第三和第四部分被称为向量。使用实数的添加和减法仅影响四元数的真实部分。

Q1plusRealNumber = Q1 + 5
Q1plusRealNumber =四元素6 + 2i + 3J + 4K
Q1minusrealnumber = Q1  -  5
Q1minusrealnumber =四元素-4 + 2i + 3j + 4k

乘法

四元数乘法是由基本元素的乘积和分配律决定的。下载188bet金宝搏回想一下基本元素的乘法,一世j,K.,是不可交换的,因此四元数乘法是不可交换的。

Q1TimesQ2 = Q1 * Q2
Q1timesQ2 =四元素-52 + 16i + 54J + 32K
Q2TimesQ1 = Q2 * Q1
Q2TimesQ1 =四元素-52 + 36i + 14j + 52k
isequal (Q1timesQ2 Q2timesQ1)
ans =逻辑0.

你也可以用实数乘以四元数。如果你用一个实数乘以一个四元数,四元数的每一部分都分别乘以这个实数:

Q1Times5 = Q1 * 5
Q1Times5 =四元素5 + 10i + 15j + 20k

四元数乘以实数是可交换的。

Isequal(Q1 * 5,5 * Q1)
ans =逻辑1

动词的词形变化

季延期的复杂缀合物定义为使得四元素的矢量部分的每个元素被否定。

第一季度
Q1 =四元素1 + 2i + 3j + 4k
连词(Q1)
ans =四元素1 - 2i - 3j - 4k

四元数与其共轭数的乘法是交换的:

Isequal(Q1 *结合(Q1),结合(Q1)* Q1)
ans =逻辑1

可以将四元数组织成向量、矩阵和多维数组。内置的MATLAB®函数已增强,以处理四元数。

衔接

四元数在串接过程中被视为单个对象,并遵循MATLAB规则进行数组操作。

Q1 =四元数(1,2,3,4);Q2 =四元数(9,8,7,6);QVector = [Q1,Q2]
qvector =1×2四元数阵列1 + 2i + 3j + 4k 9 + 8i + 7j + 6k
Q3 =四元数(-1,-2,-3,-4);Q4 =四元数(-9,-8,-7,-6);qmatrix = [qvector; q3,q4]
qMatrix =2×2四元数阵列1 + 2i + 3j + 4k 9 + 8i + 7j + 6k -1  -  2i  -  3j  -  4k -9  -  8i  -  7j  -  6k
qmultidimensionalArray(:,:,1)= qmatrix;qmultidimensionalArray(:,:,2)= qmatrix
qMultiDimensionalArray =2 x2x2四元数的数组qMultiDimensionalArray (:: 1) = 1 + 2 + 3 + 4 k 9 + 8我+ 7 j + 6 k 1 - 2 - 3 j - 4 k 9 - 8 i - 7 j - 6 k qMultiDimensionalArray (:,: 2) j = 1 + 2 + 3 + 4 k 9 + 8 + 7 j + 6 k 1 - 2 i - 3 j - 4 k 9 - 8 i - 7 j - 6 k

索引

要在四元数组中访问或分配元素,请使用索引。

qloc2 = qmultidimensionalArray(2)
qLoc2 =四元素-1  -  2i  -  3J  -  4K

用四元度替换索引二的四元数。

qmultimensionalArray(2)=α('四元碘'
qMultiDimensionalArray =2 x2x2四元数的数组qmultimensionalArray(:,:,+ 3J + 4K 9 + 8i + 7J + 6K -1  -  2I  -  3J  -  4K -9  -  8i  -  7J  -  6K

重塑

重塑四元数阵列,使用重塑函数。

qmatreshaped = Rehape(Qmatrix,4,1)
qmatreshaped =4×1四元轴数组1 + 2i + 3J + 4K -1  -  2I  -  3J  -  4K 9 + 8i + 7J + 6K -9  -  8i  -  7J  -  6K

转置

要转换四元数向量和矩阵,请使用转置函数。

qMatTransposed = ' (qMatrix)
qmattransposed =2×2四元数阵列1 + 2i + 3J + 4K -1  -  2I  -  3J  -  4K 9 + 8i + 7J + 6K -9  -  8i  -  7J  -  6K

换乘

允许换算向量,矩阵和多维数组,使用换乘函数。

qMultiDimensionalArray
qMultiDimensionalArray =2 x2x2四元数的数组qmultimensionalArray(:,:,+ 3J + 4K 9 + 8i + 7J + 6K -1  -  2I  -  3J  -  4K -9  -  8i  -  7J  -  6K
qmatpermute = ympute(qmultidimensigentarray,[3,1,2])
qmatpermute =2 x2x2四元数的数组qmatpermute(:,:,1)= 1 + 2i + 3j + 4k 1 + 0i + 0j + 0k 1 + 2i + 3j + 4k -1  -  2i  -  3j  -  4k qmatpermute(:,:,2)= 9 + 8i+ 7J + 6K -9  -  8i  -  7J  -  6K 9 + 8i + 7J + 6K -9  -  8i  -  7J  -  6K

扩展能力

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

在R2018A介绍