四元数学习之用四元数旋转向量
最近对四元数的学习又深入了一些,既然可以用四元数来表示三维物体的旋转,那么如何由一个向量和四元数作用得到一个旋转后的向量呢?
上篇博客讲到了如何将四元数转化为矩阵,这次其实是上一次的延伸,我们知道矩阵可以和向量进行相乘的,方法是将向量填充为四维齐次向量,然后4×4的矩阵左乘4×1的列向量,得到的是4×1的列向量,就是经过转换后的向量,再去掉齐次即可。
接上面一篇博客的论述,如果将四元数转化为矩阵的话,看上去是这样:
注意,上面的矩阵是行主序的,我们知道OpenGL的矩阵是列主序的。
将矩阵和一个向量相乘,就会得到经过旋转后的向量了。乘法过程非常简单,这里直接贴出代码。
void Quaternion::RotateVector( float vector[] ) const
{
Q_ASSERT( vector != Q_NULLPTR );
float x22 = 2 * x * x, y22 = 2 * y * y, z22 = 2 * z * z, w22 = 2 * w * w;
float xy2 = 2 * x * y, zw2 = 2 * z * w, xz2 = 2 * x * z, yw2 = 2 * y * w;
float yz2 = 2 * y * z, xw2 = 2 * x * w;
float vx = vector[0], vy = vector[1], vz = vector[2];
vector[0] = vx * ( x22 + w22 - 1 ) + vy * ( xy2 - zw2 ) + vz * ( xz2 + yw2 );
vector[1] = vx * ( xy2 + zw2 ) + vy * ( y22 + w22 - 1 ) + vz * ( yz2 - xw2 );
vector[2] = vx * ( xz2 - yw2 ) + vy * ( yz2 + xw2 ) + vz * ( z22 + w22 - 1 );
}
分享到:
相关推荐
代码!!!!重要!!!! 学习中关于机器人领域中四元数、欧拉角、旋转矩阵、旋转向量的相互转换关系总结,整理加深记忆。 每一个都有相互转换关系,并注释
讲述四元数和旋转矩阵之间相互转化的学术论文:首先介绍了四元数和旋转矩阵在实现向量旋转中的应用,在此基础上,根据游戏开发的实际需要,讨论了四元数和旋转矩阵之间的相互转化关系。最后,重点分析了由旋转矩阵到...
欧拉角、四元数与旋转向量,并介绍他们之间的转换关系
关于四元数和三维旋转的数学知识详解,包括复数基础,向量基础计算,向量分解旋转计算,四元数字的构成,四元数插值slerp等内容,另外简要介绍了样条插值等内容
3维、4维向量类,及3维、4维矩阵类以及四元数类,同时定义了相互间各种操作. 具体为ZVector2,ZVector3,ZVector4,ZMatrix3,ZMatrix4,ZQuternion类. 类支持“偏航、俯仰、滚转角”、“欧拉角”、“旋转矩阵”和...
四元数乘法、求逆、共轭、求范数函数,并附有求解矢量旋转坐标的程序例子
任意向量绕旋转轴单位向量旋转角度,可用四元数表示: 有旋转矩阵计算四元数若 限定,有,求得 若 因为,所以至少有一个大于0即当中最大的大于0,因此根
1. 复数、向量、矩阵三者之间的关系 2. 复数与二维旋转的关系 3. 轴角法表示三维空间的旋转 4. 四元数 5. 四元数与三维旋转的关系 1. 首先用四元数
提供一个向量(或一组向量)关于另一个向量(或一组向量)的旋转的实现。 当多个向量围绕其他向量旋转时,集合的大小必须相同。 最少的错误检查,但已优化以在处理大量向量时加快执行速度。
四元数传播四元数向量变换四元数矢量旋转 四元数分解四元数到 DCM DCM 到四元数 行主要到矩阵矩阵到行专业 就本库而言,四元数 q 只是一个四元素向量,其中 q(1:3) 是超复数的“虚数”或“向量”部分,q(4) 是“实数...
这篇郭先生就来说说欧拉角和四元数,欧拉角和四元数的优缺点是老生常谈的话题了,使用条件我就不多说了,我只说一下使用方法。 1. 欧拉角(Euler) 欧拉角描述一个旋转变换,通过指定轴顺序和其各个轴向上的指定旋转...
它还实现了欧拉角和罗德里格斯公式以及四元数版本的许多组合的旋转矩阵。 该库还包含一个 3D 可视化工具。 总结描述功能: 和和减法通常由 Matlab 作为 R^4 向量执行。 共轭左边的分区右侧分区指数的逆绝对值3D ...
这个是OpenGL相关的矩阵类,其中实现了包括了平移矩阵、旋转矩阵、缩放矩阵等各种矩阵变换的实现以及欧拉角和四元数的相关转换。
- 轻松在 Fick 旋转坐标、3*3 旋转矩阵、旋转双四元数、角向量之间来回切换- 找到两个酉向量之间的最短旋转- 找到两条线之间最短的螺旋运动(它回答两条线是否相交,如果相关,交点是什么) 该工具箱还提供了一个...
对于这些工具,四元数 q 只是一个四元素向量,其中 q(1:3) 是超复数的“虚数”或“向量”部分,q(4) 是“实数”或“标量”部分。 因此,如果 q 表示旋转,则: q(1) = v1*sin(phi/2) q(2) = v2*sin(phi/2) q(3) = ...
#math3d Node.js的向量,矩阵和... 欧拉角(用于四元数)的旋转顺序为z,然后x,然后是y。 矢量3 具有x,y,z值的三维向量; 用于3D空间中的位置,方向或比例。 var Vector3 = math3d . Vector3 ; var v1 = ne
欧拉角和旋转向量是紧凑的,但具有奇异性。事实上,我们找不到不带奇异性的三维向量描述方式 [19]。这有点类似于,当我们想用两个坐标表示地球表面时(如经度和纬度),必定存在奇异性(纬度为 ±90 ◦ 时经度无意义...
对于N个方向: DCM ===> 3x3xN多维数组EA### ===> Nx3 矩阵欧拉向量 ===> Nx4 矩阵四元数 ===> Nx4 矩阵 输入包括错误检查标志,当欧拉角接近奇点或当适当的值偏离统一时,该标志将发出警告。 因不正确的 DCM 等而...
1、旋转矩阵或四元数 到 欧拉角的方法. Utility::R2ypr和.eulerAngles(2,1,0)都可以,但是单位不同! (1)Utility::R2ypr(q_array[i – j].toRotationMatrix()) 输出的是:yaw pitch roll 的vector3d向量,单位是...