rotateframe

四元数帧旋转

描述

例子

rotationResult= rotateframe (皮疹,cartesianPoints)使用四元数旋转笛卡尔坐标点的参照系,皮疹。四元数的元素在旋转中使用之前被归一化。

例子

全部折叠

在三维空间中定义一个点。点的坐标总是按顺序指定的x,y,z。为了方便可视化,在x-y飞机。

x = 0.5;y = 0.5;z = 0;情节(x, y,“柯”)举行轴([-1 -1 -1])

创建一个四元数向量,指定两个单独的旋转,一个旋转框架45度,另一个旋转点-90度z设在。使用rotateframe来进行旋转。

皮疹=四元数([0,0,π/ 4;0,0,-π/ 2)“欧拉”,“XYZ”,“帧”);rereferencedPoint = rotateframe(皮疹,[x, y, z])
rereferencedPoint =2×30.7071 -0.0000 0 -0.5000 0

绘制重引用点。

情节(rereferencedPoint (1, 1), rereferencedPoint (1、2),“波”)情节(rereferencedPoint (2, 1), rereferencedPoint (2, 2),“去”)

在三维空间中定义两个点。定义一个四元数来重新引用点,方法是首先旋转关于的参考帧z-轴30度,然后约新的y设在45度。

一个= (1,0,0);b = (0,1,0);皮疹=四元数((30、45 0),“eulerd”,“ZYX股票”,“点”);

使用rotateframe使用四元数旋转操作符来引用两个点。显示结果。

rP = rotateframe(皮疹,[a, b])
rP =2×30.6124 -0.3536 0.7071 0.5000 0.8660 -0.0000

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

plot3 ((1), (2), (3),“波”);持有网格轴([-1 -1 -1 -1])xlabel(“x”)ylabel (“y”)zlabel (“z”b) plot3 (b (1), (2), (3),“罗”);plot3 (rP (1, 1), rP (1、2), rP (1、3)“bd”)plot3 (rP (2, 1), rP (2, 2), rP (2、3),“路”)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; (2)), (0; (3)),“k”)plot3 ([0; b (1)]、[0; b (2)]、[0; b (3)],“k”)

输入参数

全部折叠

定义旋转的四元数,指定为标量四元数或四元数向量。

数据类型:四元数

三维笛卡尔坐标点,指定为1×3的向量或N3矩阵。

数据类型:|

输出参数

全部折叠

在旋转的参照系中定义的笛卡尔坐标点,作为大小相同的向量或矩阵返回cartesianPoints

重新引用的笛卡尔坐标点的数据类型与的基础数据类型相同皮疹

数据类型:|

算法

四元数帧旋转重新引用指定的点R3.根据指定的四元数旋转原始参照系:

l ( u ) = * u

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

为了方便起见,rotateframe函数取一个点R3.并返回一个点R3.。给定一个带有任意四元数的函数调用,=一个+b我+cj +dk,任意坐标,(x,y,z],

点= [x, y, z];rereferencedPoint = rotateframe (q点)
rotateframe函数执行以下操作:

  1. 将点(x,y,z]一个四元数:

    u = 0 + x + y j + z k

  2. 可实现四元数,:

    n = 一个 2 + b 2 + c 2 + d 2

  3. 应用旋转:

    v = * u

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

扩展功能

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

另请参阅

功能

对象

介绍了R2018b