【OpenGL_02】欧拉角、万向锁、四元数

欧拉角

引用博客欧拉角与旋转矩阵的转换关系

欧拉角就是我们日常生活中常用的表示旋转的三维向量的乘积。
在Unity中,用zxy的顺序来表示旋转,即选旋转z轴、x轴、y轴的方式来表示旋转。在给出逆时针旋转的角度为正时(与右手系旋转方向相同的为旋转正方向),绕不同轴的旋转的矩阵表示:

按照不同轴进行旋转的时候,乘以相应的矩阵即可。
例如:依次按照x-y-z轴的顺序进行分别旋转特定的角度 ψ \psi ψ ϕ \phi ϕ θ \theta θ 。旋转矩阵为:

万向锁

在欧拉角的旋转计算过程中,会发生两个坐标系重合,然后欧拉角描述的旋转会丧失旋转维度的现象
如图所示:

四元数

引用博客四元数——基本概念
引用博客如何形象地理解四元数?
参考视频奇妙的四元数与空间旋转

我们将二维空间表示为(x,y),当y=0时,其实可以看成是一维的,只不过它表示成(x,0)这种形式。推到四维,(w,x,y,z),当w=0时,(0,x,y,z)就是一个三维子空间,这也是为什么我们可以用单位四元数对三维向量进行操作,其实我们是将三维向量映射到四维的三维子空间(w=0,这种形式也成纯四元数),然后对其进行旋转,最终得到的向量结果依然是这个三维子空间中的,因而可以映射回三维空间。
四元数的表达式为:
q = w + x i + y j + z k q=w+xi+yj+zk q=w+xi+yj+zk
其中, i 2 = j 2 = k 2 = i j k = − 1 i^2=j^2=k^2=ijk=-1 i2=j2=k2=ijk=1
所以,四元数原本是用来描述在四维空间中的点的位置,可以用来描述四维空间中的旋转,也可以用来描述子空间(三维空间)的旋转。
所以可以用纯四元数来描述三维空间中的点。表达式为:
q w = ( 0 , w x , w y , w z ) qw = (0,wx,wy,wz) qw=(0,wx,wy,wz)

如果你想算一个点在这个旋转下新的坐标,需要进行如下操作,
1.定义纯四元数

2.进行四元数运算

3.产生的 q w ′ qw^{'} qw一定是纯四元数,也就是说它的第一项为0,有如下形式:

4. q w ′ qw^{'} qw中的后三项就是:、

这样,就完成了一次四元数旋转运算。
同理,如果你有一个四元数:

那么,它对应一个以向量 v = ( v x , v y , v z ) v=(vx,vy,vz) v=(vx,vy,vz)为轴,旋转角度 θ \theta θ的旋转操作(右手法则的旋转)。
里面用的是 θ 2 \frac{\theta}{2} 2θ而不是 θ \theta θ。这是因为 q q q做的就是一个 θ 2 \frac{\theta}{2} 2θ的旋转,而 q ′ q^{'} q也做了一个 θ 2 \frac{\theta}{2} 2θ的旋转。我们进行了两次旋转,而不是一次,这两次旋转的结果是一个旋转角为 θ \theta θ的旋转。

示意图:

四元数的矩阵乘法及其可易性

引用文章四元数矩阵的乘法及其可易性

蜕变矩阵

已知矩阵 P P P的运算如下,

四元数的矩阵乘法

所以,如果有两个四元数 q 1 = a + b i + c j + d k q_1=a+bi+cj+dk q1=a+bi+cj+dk q 2 = e + f i + g j + h k q_2=e+fi+gj+hk q2=e+fi+gj+hk
那么它们的乘积为

同理, q 2 q_2 q2 q 1 q_1 q1的乘积为

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值