笔记来自《游戏引擎架构》Jason Gregory著 第二版,4.4四元数,Page144。
引入:矩阵变换的三个问题
3*3矩阵可以表示三位中的任何旋转,但是他又三个问题。
1.9个浮点型表述只有三个自由度的旋转显得多余。
2.矩阵乘法过于复杂对于计算机来说,我们需要运算更快的旋转方法。
3.不能平滑插值。
如此,我们有quaternion q = {x,y,z,w}
四元数由威廉哈密顿爵士发明,作为复数的衍生,其定义x,y,z为虚部,w为实部,即x^2 = y^2 = z^2 =-1,w^2 = 1。
我们并不需要使用虚数,四元数并不是为旋转而生,我们只需要知道,单位长度四元数可以表示旋转,
即x^2 + y^2 + z^2 + w^2 = 1。
需要注意:四元数同矩阵一样代表一种变换而不是一个具体到位置的旋转,四元数的作用对象是向量而不是一个点,你可以让一个箭头绕轴旋转90度,但是你不能让一个点旋转,因为点是没有方向的。这可能影响你理解四元素。
旋转的三维表现
矢量vector 标量scalar。
以下标粗字母为矢量。
q = [qv,qs],qv矢量部分是一个Vector3,qs标量部分为float。
q = [a*sinθ/2 , cosθ/2],在三维中,a为旋转轴的单位向量,绕轴a按右手法则旋转θ,即为该q定义的旋转。
旋转的乘法
注意:两个四元数相加不表示任何旋转,因为其模长不等于1。
p和q表示两个旋转,两者合成旋转用乘法表示pq,四元数的乘法有多种,此处用拉各斯曼积Grassmann product草人积
pq = [ps

探讨四元数解决矩阵变换三大难题,介绍四元数原理、运算及在游戏引擎中实现平滑旋转与插值,对比矩阵,强调四元数在效率与效果上的优势。
最低0.47元/天 解锁文章
2286

被折叠的 条评论
为什么被折叠?



