- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在3D空间中旋转矢量时,如何理解轴角旋转矢量是有点困难的。为什么要用到这些,它们与旋转矩阵有什么关系?
我还发现了一个名为vrrotvec2mat
的函数,它似乎可以实现我想要的功能,但我无法理解文档具体来说,有人能对输入参数r
和options
给出一个更清晰的解释吗?
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
就是结果向量。vrot
和v||
是相对于向量v_|_
的平行和垂直投影这是罗德里格斯公式的推导过程,我这里不讲如果你想要一个完整的推导,我会给你介绍这篇文章。
罗德里格斯旋转公式被提出旋转的原因是非常频繁的,有一个应用程序,你绕着一个不以原点为中心的轴旋转,也不会相对于标准v
,k
和x
轴旋转。
事实上,如果你看维基百科的文章,你不需要转换到矩阵形式来旋转东西您可以直接使用单位向量和旋转角度来旋转向量,这就引出了他的旋转公式:
来源:right-hand rule
之所以存在y
,是因为在线性代数中,你可以在旋转矢量与旋转矩阵之间的轴角表示与旋转原点之间进行转换。然后,您可以应用相同的线性代数理论在给定该旋转矩阵的三维空间中旋转向量/点可以分别使用z
和vrrotvec2mat
在法向旋转矩阵和Rodrigues公式表示之间来回转换。
轴角表示本质上是一个4元矢量,其中前三个元素是
vrrotvec2mat
和
vrrotmat2vec
分量的单位向量
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
轴的笛卡尔空间中的标准旋转矩阵。如果你回忆起旋转矩阵,它是:
(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
epsilon
,
1e-12
或
epsilon
。
关于matlab - 轴角旋转矢量如何工作,以及它们与旋转矩阵的比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32485772/
在 Matlab 中,您可以选择创建新的“示例”脚本文件以及脚本、函数、类等。创建它们时,它们会获得一个脚本图标。 它们与其他标准脚本文件的处理方式有何不同? 是否有关于这些示例脚本类型的预期用途的文
我正在运行一个不是我自己编写的大 m 文件,它依赖于某些子函数。我想知道是否在所有嵌套函数的任何地方都使用了特定函数(在我的例子中是函数 eig.m(计算特征值))。有没有快速的方法来做到这一点? 亲
Matlab中有一个函数叫 copulafit .我怎样才能看到这个函数背后的代码?许多 Python 的 numpy 和 scipy 函数在 Github 上很容易开源,但由于某种原因我在 Gith
我定义了一个抽象基类measurementHandler < handle它定义了所有继承类的接口(interface)。这个类的两个子类是a < measurementHandler和 b < me
假设有一个矩阵 A = 1 3 2 4 4 2 5 8 6 1 4 9 例如,我有一个 Vector 包含该矩阵每一列的“类”
我有一个在后台运行的 Matlab 脚本。随着计算的进行,它会不断弹出进度栏窗口。这很烦人。 问题是我没有自己写 Matlab 脚本,这是一段很长很复杂的代码,我不想搞砸。那么如何在不修改 Matla
有没有办法从一个 matlab 程序中检测计算机上正在运行多少个 matlab 进程? 我想要恰好有 n 个 matlab 进程在运行。如果我的数量太少,我想创建它们,如果数量太多,我想杀死一些。您当
我正在测试我们在 Matlab 中开发的一个独立应用程序,当时我注意到它的内存使用量(根据 Windows 任务管理器)达到了 16gb 以上的数倍峰值。我决定在编译版本后面的脚本上使用 profil
我面临着一个相当棘手的问题。在 Matlab 中,命令 S = char(1044) 将俄语字母 д 放入变量 S。但是 disp(S) 返回空白符号,尽管内容实际上是正确的: >> S = char
我在这行 MATLAB 代码中遇到内存不足错误: result = (A(1:xmax,1:ymax,1:zmax) .* B(2:xmax+1,2:ymax+1,2:zmax+1) +
我正在寻找一种在 MATLAB 中比较有限顺序数据与非确定性顺序的方法。基本上,我想要的是一个数组,但不对包含的元素强加顺序。如果我有对象 a = [x y z]; 和 b = [x z y]; 我希
我有一个由 1 和 0 组成的二维矩阵。 mat = [0 0 0 0 1 1 1 0 0 1 1 1 1 1 0 0 1 0 0 0 1 0 1 1 0 0 1]; 我需
我可以在 Matlab 中用一组 x,y 点绘制回归线。但是,如果我有一组点(如下图),假设我有四组点,我想为它们绘制四条回归线……我该怎么做?所有的点都保存在 x,y 中。没有办法将它们分开并将它们
我正在尝试使用以下代码在 MATLAB 中绘制圆锥体。但是,当 MATLAB 生成绘图时,曲面中有一个间隙,如下图所示。谁能建议关闭它的方法? clearvars; close all; clc; [
我有一个 map称为 res_Map,包含一组不同大小的数组。我想找到用于存储 res_Map 的总内存。 正如您在下面看到的,看起来 res_Map 几乎不占用内存,而 res_Map 中的各个元素
有没有办法在 MATLAB 中组合 2 个向量,这样: mat = zeros(length(C),length(S)); for j=1:length(C) mat(j,:)=C(j)*S;
已结束。此问题不符合 Stack Overflow guidelines 。它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答它。 关闭 5 年前
我正在尝试将MatLab中的t copula适配到我的数据,并且我的功能是: u = ksdensity(range_1, range_1,'function','cdf'); v = ksdens
大家好,我目前正在尝试使用论文“多尺度形态学图像简化”中的 SMMT 运算符 Dorini .由于没有订阅无法访问该页面,因此我将相关详细信息发布在这里: 请注意,我将相关文章的部分内容作为图片发布。
我在MATLAB中编写代码,需要使用一个名为modwt的函数,该函数同时存在于两个我同时使用的工具箱(Wavelet和WMTSA)中。问题在于,一个版本仅返回一个输出,而另一个版本则返回三个输出。我应
我是一名优秀的程序员,十分优秀!