学习路线指引(点击解锁) | 知识定位 | 人群定位 |
---|---|---|
🧡 Python实战微信订餐小程序 🧡 | 进阶级 | 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 |
💛Python量化交易实战💛 | 入门级 | 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 |
在前面一篇文章中我们介绍了欧拉角死锁问题的一些产生背景,还有基于四元数的求解方案。四元数这个概念虽然重要,但是很少会在通识教育课程中涉及到,更多的是一些图形学或者是工程学当中才会进行讲解。本文主要是面向四元数,相比上一篇文章更加详细的介绍和总结一下四元数的一些运算法则,还有基于四元数的插值法。
说到四元数,很多人可能会觉得有点陌生,但是如果说复数,很多人就都有学习过。我们一般用z=x+iyz=x+iyz=x+iy这样的形式去定义一个复数(Complex Number),其中xxx是实部,而yyy是虚部,iii是虚数单位,并且有i2=−1i2=−1i^2=-1这样的特性。并且对于一个虚数而言,如果取自然指数(运算规则为:eiθ=cosθ+i sinθeiθ=cosθ+i sinθe{i\theta}=cos\theta+i sin\theta),还能够得到一个很美的数学公式:eiπ=−1eiπ=−1e{i\pi}=-1,这就是非常著名的欧拉公式。
而四元数Quaternion这个概念的提出,更像是对复数的一个扩展,我们通常把四元数写成这样的形式:
q=s+ix+jy+kzq=s+ix+jy+kzq=s+ix+jy+kz
其中s,x,y,zs,x,y,zs,x,y,z都是实数,并满足这样的一些运算规则:
i2=j2=k2=ijk=−1i×j=k,j×k=i,k×i=jj×i=−k,k×j=−i,i×k=−ji2=j2=k2=ijk=−1i×j=k,j×k=i,k×i=jj×i=−k,k×j=−i,i×k=−ji2=j2=k^2=ijk=-1\
i\times j=k,j\times k=i,k\times i=j\
j\times i=-k,k\times j=-i,i\times k=-j
以上都是四元数的一些基本定义,接下来我们逐一看一下四元数的一些基本运算。
两个四元数的加法就是将“实部虚部”对应位置做元素求和:
q1+q2=(s1+ix1+jy1+kz1)+(s2+ix2+jy2+kz2)=(s1+s2)+i(x1+x2)+j(y1+y2)+k(z1+z2)q1+q2=(s1+ix1+jy1+kz1)+(s2+ix2+jy2+kz2)=(s1+s2)+i(x1+x2)+j(y1+y2)+k(z1+z2)q_1+q_2=(s_1+ix_1+jy_1+kz_1)+(s_2+ix_2+jy_2+kz_2)=(s_1+s_2)+i(x_1+x_2)+j(y_1+y_2)+k(z_1+z_2)
可以简单证明,四元数的加法满足交换律、结合律和分配律,这里不过多展开介绍。
在系数缩放这一点上,四元数与复数是一致的:
λq=λs+iλx+jλy+kλzλq=λs+iλx+jλy+kλz\lambda q=\lambda s+i\lambda x+j\lambda y+k\lambda z
逐一对四元数中的各项元素进行缩放即可。
四元数的乘法是所有元素之前都要运算一遍:
q1q2=(s1+ix1+jy1+kz1)∗(s2+ix2+jy2+kz2)=(s1s2−x1x2−y1y2−z1z2) +i(s1x2+s2x1+y1z2−y2z1) +j(s1y2+s2y1+x2z1−x1z2) +k(s1z2+s2z1+x1y2−x2y1)q1q2=(s1+ix1+jy1+kz1)∗(s2+ix2+jy2+kz2)=(s1s2−x1x2−y1y2−z1z2) +i(s1x2+s2x1+y1z2−y2z1) +j(s1y2+s2y1+x2z1−x1z2) +k(s1z2+s2z1+x1y2−x2y1)\begin{align*}
q_1q_2&=(s_1+ix_1+jy_1+kz_1)(s_2+ix_2+jy_2+kz_2)\
&=(s_1s_2-x_1x_2-y_1y_2-z_1z_2)\
&\ +i(s_1x_2+s_2x_1+y_1z_2-y_2z_1)\
&\ +j(s_1y_2+s_2y_1+x_2z_1-x_1z_2)\
&\ +k(