四元数在旋转变换和插值中的有趣的可视化解释
  d78F4xdW96m7 15天前 26 0

四元数可以旋转三维空间中的向量,而最近刚好硬着头皮读《复分析可视化方法》(见[1]),这本书中,作者非常巧妙地运用球极射影的方法,将三维空间单位球面上绕向量轴旋转的变换,映射为复平面上旋转矩阵的表示,对四元数的插值给出可视化的有趣并且直观的解释。

四元数的基本定义(参考2),两个四元数相乘可以得到:

绕球面上一点p旋转θ角度,可以表示成对任意两条过p成角θ/2的两条球面直线(大圆)的反射复合。反射就是类似对球面大圆所在平面的对称点的数学概念。两个旋转可以复合成一个旋转变换,如图:
              
L与M的夹角是θ/2,相交于点r, 点P1对L反射为P2,再对M反射成P3,两次反射后P1变成P3就像绕点r旋转了θ角度。再复合一个旋转,使P3对M反射又成P2,然后对N反射成P4, 四次连续反射后P1变成P4旋转ψ角度。

经过证明(详细请参考[1]255页,6.2.4小节空间旋转也是默比乌斯变换)跳过其中的细节,球面上的旋转可以用复平面上的矩阵来表示。用矩阵相乘来研究球面上旋转变换复合的性质。球面上绕v旋转表示下面的矩阵形式,v = li+mj+nk

在球面上分别绕 x ,y ,z 轴旋转π, 例如当绕 x轴旋转时 l = 1, m = 0, n = 0,ψ = π

容易验证得出连续两次绕 x ,y ,z 轴旋转π,矩阵的乘积等于 -1,其中两个矩阵的积等于另一个矩阵,所以绕向量v旋转ψ的矩阵就可以拆解为下面的表达式:

到了这里突然就有了一种似曾相识的感觉,上面表达式跟单位四元数的定义式等同。球面的上的旋转复合现在可以用四元数的乘积来表示了,这一下好像打开了一扇门,因为球面上所有的运动都可以用旋转搞定,也就可以用四元数代数运算来表示了,反过来同理,单位四元数表示的4维向量,在球面上有具体的可视化解释,大脑于是开始炸裂了。接着,特里斯坦直接写出四元素旋转公式的非常直观的证明,(描述下当时读到这段的心情:经常看到用代数方法解决几何问题,作者用几何的方法证明代数公式,惊呆了! 这比[4]文中用向量运算证明四元数旋转公式的方法直观很多)
              
    简单地考察球面上的点旋转效果,假设球面上p'点是由p点绕a点角度ψ而成,想象一下在p'点时,绕a点相反方向角度-ψ就会回到原来的p点, 此时绕p点的旋转任意角度θ,再继以绕a点相正方向角度ψ,最后得到就是绕p'点旋转角度θ。

要理解上式,可能刚开始心情比较平静,感觉哪里见过(比如矩阵相似形式),慢慢有一点不习惯,在这个等式中似乎任意两个旋转(对应的矩阵)都是相似的,因为球面上任意两点p,p'都有一个点a,p绕a旋转能到达p'。其次,旋转空间中的向量,用四元数的代数运算代替了矩阵作用于向量的乘法,当 θ = π时就是通常说的四元数的向量旋转公式。

现在介绍可视化球面线性插值SLERP,在网上分享的很多的资料和参考中,对两个四元数的插值的计算方法(参考6)都是在四元数点积的基础之上(类似三维空间向量的点积运算),相对于两点之间的线性插值,四元数之间的插值显得很不直观。但使用前面描述的四元数的可视方法,这种插值方法就变得很直观明白了。SLERP公式有两种(参考3):

q0,q1是需要进行插值的两个四元数,q'是插值的中间状态的值。第一个等式也是计算机中常用的插值公式,第二个等式相对来说要计算一次四元数的乘积(并不比矩阵运算量少),但这两个等式下面可以看到其实是相同的。由于两个单位四元数之积是另一个单位四元数,q0q'的积是q1,求得q'
                
t在[0,1]之中变化,使用q'的t次幂来对q0q1插值,得益于上面等式(1)的运用,简直就是欧拉公式的翻版,又一次惊呆了,对于这一类的四元数(只有旋转角度θ改变,u保持不变)它们的性质就如复平面的单位长度的虚数一样了,在时刻t由等式(2),q'的旋转角度变成tθ,使用前面对四元数介绍,这样插值就有很直观的可视化解释了:
                 
q'q0q1之间改变,它的旋转角度在t1时刻是ψ1,在t2时刻变成ψ2,根据球面几何中的计算方法,旋转角度随时间变化的增量ψ2-ψ1,即角速度变化并不是一个常数。在计算机的图形应用中,如果一个物体绕q0旋转过渡到绕q1旋转,从微小到很难察觉的尺度看也许并不太丝滑。
                  
逆推两个插值公式相等,只需要θ=ψ满足就可以了。根据定义显然cosθ等于q0q1的点积,也等于q0的逆与q1乘积的实部cosψ,所以θ与ψ是相等的。从球面来可视化看,q0q1的夹角θ就是q0的逆与q1乘积的旋转角ψ。

总结:借助四元数在球面上的表示,通过作图可以看到两个四元数之间插值时的改变。由于有限的时间和精力,不能把其中一些结论的详细推导过程写下来。作图完全靠手画,编写数学公式不熟练,用了差不多一周的时间,通过读下面引用的参考材料,将四元数插值过程大概描述出来也许也不错吧。

参考:

[1] [美]特里斯坦.尼达姆, 复分析:可视化方法,齐民友译.北京:人民邮电出版社
[2] Understanding Quaternions 中文翻译
[3] David Eberly, Quaternion Algebra and Calculus
[4] 四元数与旋转变换
[5] 四元数的球面线性插值(slerp)
[6] 四元数插值与均值(姿态平滑)

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 15天前 0

暂无评论

推荐阅读
  oXKBKZoQY2lx   2024年03月19日   69   0   0 计算机图形学
d78F4xdW96m7