gpt4 book ai didi

matlab - 轴角旋转矢量如何工作,以及它们与旋转矩阵的比较?

转载 作者:太空宇宙 更新时间:2023-11-03 19:31:07 30 4
gpt4 key购买 nike

在3D空间中旋转矢量时,如何理解轴角旋转矢量是有点困难的。为什么要用到这些,它们与旋转矩阵有什么关系?
我还发现了一个名为vrrotvec2mat的函数,它似乎可以实现我想要的功能,但我无法理解文档具体来说,有人能对输入参数roptions给出一个更清晰的解释吗?
MathWorks explanations非常有限,如下所示:
从轴角旋转到矩阵表示
m = vrrotvec2mat(r)返回由轴角旋转矢量定义的旋转的矩阵表示,r
m = vrrotvec2mat(r,options)返回由轴角旋转向量R定义的旋转的矩阵表示,默认算法参数由选项中定义的值替换。
options结构包含参数epsilon,该参数表示数字将被视为零的值(默认值为1e-12)。
旋转矢量r是四个元素的行向量,其中前三个元素指定旋转轴,最后一个元素定义角度。
若要旋转三个元素的列向量,请将其乘以旋转矩阵>若要旋转三个元素的行向量,请将其乘以转置的旋转矩阵。

最佳答案

如果你想理解vrrotvec2mat函数,你需要知道旋转轴的表示如何在我们深入研究这个函数之前起作用。具体来说,你要理解的是“AA>”,也称为轴角旋转公式。我先给你介绍一下。
在线性代数中,旋转一个点的最标准方法,不管是二维的还是三维的,是使用一个Rodrigues Rotation formula来预乘(即y = A*x其中x是列向量中表示的点)二维或三维坐标与这个旋转矩阵这将围绕坐标系的原点旋转点你也可以认为这是旋转一个向量,其中尾巴在原点,头部在二维或三维空间的点上。
然而,另一种方法是提供已知的仅在三维空间中有效的轴角表示。轴由一个单位向量v描述,它描述了一个旋转轴,向量k由这个轴围绕一个角度旋转。
下面是我从维基百科上得到的一个图片例子:
来源:rotation matrix
在我们的例子中,向量v指向正上方,向量k指向西北45度角我们希望这个向量绕矢量180轴旋转的角度为v,所以如果你这样做,k就是结果向量。vrotv||是相对于向量v_|_的平行和垂直投影这是罗德里格斯公式的推导过程,我这里不讲如果你想要一个完整的推导,我会给你介绍这篇文章。
罗德里格斯旋转公式被提出旋转的原因是非常频繁的,有一个应用程序,你绕着一个不以原点为中心的轴旋转,也不会相对于标准vkx轴旋转。
事实上,如果你看维基百科的文章,你不需要转换到矩阵形式来旋转东西您可以直接使用单位向量和旋转角度来旋转向量,这就引出了他的旋转公式:
来源:right-hand rule
之所以存在y,是因为在线性代数中,你可以在旋转矢量与旋转矩阵之间的轴角表示与旋转原点之间进行转换。然后,您可以应用相同的线性代数理论在给定该旋转矩阵的三维空间中旋转向量/点可以分别使用zvrrotvec2mat在法向旋转矩阵和Rodrigues公式表示之间来回转换。
轴角表示本质上是一个4元矢量,其中前三个元素是 vrrotvec2matvrrotmat2vec分量的单位向量 x,定义了你的旋转轴,最后一个元素是旋转角度 y,这个旋转轴相对于这个轴旋转矢量。 z在这里没有什么不同,它需要一个4元素向量,按照我刚才提到的顺序但是,快速查看源代码, k是以弧度定义的。
如果您想要看到这个工作的一个具体例子,让我们使用上面的图表作为一个例子单位向量 theta指向“cc”轴,因此前三个分量为 vrrotvec2mat。我们希望旋转180度,所以第四个参数是 theta所以:

>> M = vrrotvec2mat([0 0 1 pi])

M =

-1.0000 -0.0000 0
0.0000 -1.0000 0
0 0 1.0000

这正好定义了在 k轴周围的180度旋转,如果你看一下在 z轴的笛卡尔空间中的标准旋转矩阵。如果你回忆起旋转矩阵,它是:
Rodrigues' Rotation formula
如果您在上面的矩阵中替换 (0,0,1),您将得到与 pi函数中相同的结果但是,忽略第一行第二列的符号,因为这是由于数值精度这就引出了第二个参数基本上,当使用罗德里格斯旋转公式计算旋转矩阵值时,有时矩阵中的值会很小 z结构有一个名为 z的字段,在该字段中,可以指定任何小于此阈值的值在计算矩阵后都被视为零 theta = pi的缺省值非常适合IMHO。
如果要更改默认值,只需创建一个具有单个元素的结构,该元素将更改此阈值,并使用此附加的第二个参数调用函数比如说:
>> options.epsilon = 1e-15;
>> M = vrrotvec2mat([0 0 1 pi], options);

在任何情况下,回到我们刚才所说的,假设我们给定的向量 M是关于上图的,它指向西北-特别是 vrrot2vec2mat如果我们使用这个旋转矩阵并旋转这个点,我们应该使它平行于 options平面并指向相反的方向,所以我们应该得到 options
>> M*[1;0;1]

ans =

-1.0000
0.0000
1.0000

也可以使用罗德里格斯旋转公式得到相同的结果:
>> v = [1;0;1];
>> k = [0;0;1];
>> theta = pi;
>> vrot = v*cos(theta) + cross(k,v)*sin(theta) + k*(k.'*v)*(1-cos(theta))

vrot =

-1.0000
0.0000
1.0000

总而言之,这只是绕任意轴旋转矢量的另一种方法,而不仅仅局限于标准 epsilon1e-12epsilon

关于matlab - 轴角旋转矢量如何工作,以及它们与旋转矩阵的比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32485772/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com