`
jgsj
  • 浏览: 990165 次
文章分类
社区版块
存档分类
最新评论

四元数学习之用四元数旋转向量

 
阅读更多

四元数学习之用四元数旋转向量

最近对四元数的学习又深入了一些,既然可以用四元数来表示三维物体的旋转,那么如何由一个向量和四元数作用得到一个旋转后的向量呢?

上篇博客讲到了如何将四元数转化为矩阵,这次其实是上一次的延伸,我们知道矩阵可以和向量进行相乘的,方法是将向量填充为四维齐次向量,然后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 );
}
分享到:
评论

相关推荐

    程序:四元数欧拉角旋转向量旋转矩阵变换transform.cpp

    代码!!!!重要!!!! 学习中关于机器人领域中四元数、欧拉角、旋转矩阵、旋转向量的相互转换关系总结,整理加深记忆。 每一个都有相互转换关系,并注释

    3D 数学库-矩阵 向量 四元数

    此外,四元数还可以与向量进行乘法运算,实现旋转操作。 3D数学库通常会提供这些基础数据结构和相应的运算函数,包括矩阵的乘法、逆运算、求行列式、解线性方程组;向量的加减、点乘、叉乘、规范化;以及四元数的...

    欧拉角、四元数与旋转向量

    **旋转向量**是一种用向量表示旋转的方法。该向量的方向表示旋转轴的方向,向量的长度则表示旋转的角度。这种表示方法简洁明了,容易理解。 - **表示形式**:设旋转向量为\(\vec{r} = \theta \hat{n}\),其中\(\...

    四元数与旋转矩阵详细推导过程

    四元数与旋转矩阵详细推导过程 在了解四元数(Quaternion)与三维旋转之间的关系之前,我们需要了解复数(Complex Number)的一些性质,以及它与二维旋转之间的关系。四元数的许多性质在很多层面上都与复数非常类似...

    python将四元数变换为旋转矩阵的实例

    由于直接用Python实现四元数到旋转矩阵的转换涉及较为复杂的数学计算,许多开发者会选择利用现成的库函数来简化开发流程。例如,通过autolab_core中的RigidTransform类,只需要一行代码就可以完成转换: ```python ...

    使用四元数实现的旋转

    其中,qvq*表示四元数q作用于向量v后的结果,v_x、v_y、v_z是向量v的分量,而x、y、z、w是四元数q的虚部和实部。这里的星号(*)代表共轭四元数,对于实部为w,虚部为xi + yj + zk的四元数,其共轭为w - xi - yj - zk...

    四元数与三维旋转.pdf

    文章中还提到了向量基础计算和向量分解旋转计算,即如何利用四元数来表示和计算三维空间中向量的旋转。此外,四元数的插值方法slerp(球面线性插值)是关键内容之一。slerp是一种在四元数空间中,从一个四元数到另一...

    四元数与旋转变换.pdf

    通过学习笔记的形式,Charles007对四元数及其与旋转变换的关系进行了总结,涵盖了从基本概念到运算规则,再到实际应用的多方面内容。通过这样系统的梳理,学习者可以更加深入地理解四元数在图形图像处理中的作用,...

    四元数和旋转矩阵相互转化的算法实现

    讲述四元数和旋转矩阵之间相互转化的学术论文:首先介绍了四元数和旋转矩阵在实现向量旋转中的应用,在此基础上,根据游戏开发的实际需要,讨论了四元数和旋转矩阵之间的相互转化关系。最后,重点分析了由旋转矩阵到...

    四元数法计算两个物体之间的相对位姿参数

    `vec2quat`和`quat2vec`函数可帮助在四元数和旋转向量之间转换。 压缩包中的“fourelemrents”可能是包含了MATLAB代码的文件,这些代码可能展示了如何应用上述概念来计算两个物体的相对位姿。使用这些工具和方法,...

    四元数数学基础.pdf

    四元数是一种扩展复数的数学概念,它在三维空间中的应用尤其广泛,比如在计算机图形学、机器人技术、航空航天等领域,用于表示和计算三维空间中的旋转。四元数由一个实部和三个虚部构成,形式上可以表示为q = w + xi...

    四元数详细讲解.pdf

    你可以通过`Quaternion.Euler()`函数指定欧拉角来创建四元数,然后使用`Quaternion.RotateTowards()`进行平滑旋转,或用`Quaternion.Lerp()`进行插值。此外,四元数还可以与其他四元数相乘以组合多个旋转。 总的来...

    四元数MATLAB相关计算

    四元数是一种扩展的复数,常用于三维空间中的旋转表示和处理,特别是在计算机图形学、机器人学和航空航天工程等领域。在MATLAB中,四元数提供了高效且直观的方式来描述和操作3D旋转。本节将详细介绍四元数的几个核心...

    C++编写的实现四元数操作的类

    此外,可能还需要提供一些辅助方法,如归一化(将四元数长度置为1)、反向(取共轭四元数,即w不变,xyz变为其相反数)以及与向量的乘法(将四元数视为旋转,应用到3D向量上)等。 在实际应用中,四元数的使用通常...

    四元数MATLAB工具箱

    - 四元数旋转:在三维空间中,四元数可以用来表示旋转,其优点在于没有 gimbal lock(万向锁)问题。通过四元数乘法,可以实现对向量的旋转操作。 - 旋转矩阵与四元数转换:四元数工具箱提供函数将旋转矩阵转换为...

    四元数与三维旋转1

    四元数与Rodrigues' Rotation Formula存在联系,可以通过四元数的运算得到旋转向量的表达。此外,四元数还可以表示为矩阵形式,这对于矩阵运算和大批量计算非常有用。四元数的指数形式提供了一种简便的方式来表示...

    四元数旋转:使用四元数实现一个或多个向量关于另一个向量(或多个向量)的旋转。-matlab开发

    四元数是一种数学工具,广泛应用于三维空间中的旋转表示,特别是在计算机图形学和物理学中。...通过理解和掌握四元数旋转的原理及MATLAB实现,开发者能够在相关领域如游戏开发、模拟仿真等中更加得心应手。

    slerp_四元数插值_四元数slerp_slerp_

    6. 最后,使用四元数的旋转向量表示计算插值四元数q: ``` q = q1 * sin((1 - t) * θ) / sin(θ) + q2 * sin(t * θ) / sin(θ); ``` 这段代码实现的SLERP可能包括以上步骤,通过四元数乘法和向量操作来高效地...

    Jia - Quaternions and Rotations 四元数与旋转

    四元数是数学中一种非常重要的复数扩展,由威廉·罗恩·哈密顿在19世纪初提出。...通过学习这部分内容,你可以深入理解四元数如何在实际问题中解决旋转表示和计算的挑战,提升你在IT领域的专业技能。

    四元数理解要义-用于分解旋转角和加速度.docx

    如果有一个向量P需要绕轴u旋转θ度,旋转后的向量P'可以用四元数乘法计算得出:P' = q * P * conj(q),其中conj(q)是q的共轭四元数。 惯性导航系统(Inertial Navigation System, INS)是通过测量物体的加速度和...

Global site tag (gtag.js) - Google Analytics