rotatepoint

四元数旋转点

描述

rotationResult= rotatepoint(cartesianPoints使用四元数旋转笛卡尔点,。四元数的元素在旋转使用前归。

例子

全部收缩

在三维空间中定义一个点。一个点的坐标,以便始终指定Xÿž。为了方便可视化,定义对点X-ÿ平面。

X = 0.5;Y = 0.5;Z = 0;积(X,Y,“柯”)举行轴([-1 -1 -1])

创建指定两个独立的旋转而产生的四元数向量,一个旋转点45和另一旋转点大约-90度ž-轴。使用rotatepoint进行旋转。

季铵盐=四元数([0,0,PI / 4;...0,0,-pi / 2],“欧拉”'XYZ''点');rotatedPoint = rotatepoint(季,[X,Y,Z])
rotatedPoint =2×3-0.0000 0.7071 0 0.5000 -0.5000 0

绘制旋转点。

情节(rotatedPoint(1,1),rotatedPoint(1,2),“波”)图(rotatedPoint(2,1),rotatedPoint(2,2),'走'

在三维空间中定义了两个百分点。定义一个四元数由第一绕旋转点ž- 轴30度,然后对新ÿ设在45度。

A = [1,0,0];B = [0,1,0];季铵盐=四元数([30,45,0],'eulerd''ZYX''点');

使用rotatepoint旋转使用四元数转动算两分。显示结果。

RP = rotatepoint(季,[A; B])
RP =2×30.6124 0.5000 -0.6124 -0.3536 0.8660 0.3536

观察点的原始方向和旋转方向。为了便于观察,从原点到每个点都要画线。

plot3(一(1),(2),(3),“波”);保持轴([ -  1 1 -1 1 -1 1])xlabel('X')ylabel ('Y')zlabel('Z')plot3(B(1),B(2),B(3),'RO');plot3(RP(1,1),RP(1,2),RP(1,3),'BD')plot3(RP(2,1),RP(2,2),RP(2,3),'RD')plot3([0; RP(1,1)],[0; RP(1,2)],[0; RP(1,3)],数k)plot3([0; RP(2,1)],[0; RP(2,2)],[0; RP(2,3)],数k)plot3([0;一个(1)],[0; A(2)],[0; A(3)],数k)plot3([0,B(1)],[0; B(2)],[0; B(3)],数k

输入参数

全部收缩

四元数即限定旋转,指定为一个标量四元数,四元数的行向量,或四元数的列向量。

数据类型:四元

三维笛卡尔点,指定为1×3向量或ñ3矩阵。

数据类型:|

输出参数

全部收缩

使用四元数旋转定义的旋转笛卡尔坐标点,作为大小相同的向量或矩阵返回cartesianPoints

数据类型:|

算法

四元数点旋转而旋转,在指定的点[R3根据指定的四元数:

大号 q ü = q ü q *

哪里q是四元,*代表接合,ü是要旋转的点,指定为四元数。

为方便起见,rotatepoint函数需要在一个点[R3并返回一个点[R3。给定一个函数调用一些任意四元数,q=一种+b我+Cj +dķ,任意坐标,[Xÿž]例如,

rereferencedPoint = rotatepoint(Q,[X,Y,Z])
rotatepoint函数执行以下操作:

  1. 将点[Xÿž]到四元数:

    ü q = 0 + X 一世 + ÿ Ĵ + ž ķ

  2. 规范化四元数,q

    q ñ = q 一种 2 + b 2 + C 2 + d 2

  3. 适用旋转:

    v q = q ü q q *

  4. 四元数输出转换,vq, 回到[R3

扩展功能

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

也可以看看

职能

对象

介绍了在R2020a