四元数在旋转变换和插值中的有趣的可视化解释

news/2024/10/12 4:30:03

四元数可以旋转三维空间中的向量,而最近刚好硬着头皮读《复分析可视化方法》(见[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小节空间旋转也是默比乌斯变换)跳过其中的细节,球面上的旋转可以用复平面上的矩阵来表示。用矩阵相乘来研究球面上旋转变换复合的性质。

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

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

到了这里突然就有了一种似曾相识的感觉,上面表达式跟单位四元数的定义式等同。球面的上的旋转复合现在可以用四元数的乘积来表示了,这一下好像打开了一扇门,因为球面上所有的运动都可以用旋转搞定,也就可以用四元数代数运算来表示了,反过来同理,单位四元数表示的4维向量,在球面上有具体的可视化解释,大脑于是开始炸裂了。接着,特里斯坦直接写出四元素旋转公式的非常直观的证明,(描述下当时读到这段的心情:经常看到用代数方法解决几何问题,作者用几何的方法证明代数公式,惊呆了! 这比[3]文中用向量运算证明四元数旋转公式的方法直观很多)

简单地考察球面上的点旋转效果,假设球面上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] 四元数插值与均值(姿态平滑)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/27345.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

python包:torchsummary

利用torchsummary观察每一层的情况1)按照方式 pip install torchsummary 2)

SQL注入-基于Pikachu的学习

zhSQL注入 SQL数据库的基本语句 SQL 教程 | 菜鸟教程 (runoob.com) 史上最全SQL基础知识总结(理论+举例)-CSDN博客 SQL注入原理 SQL注入漏洞主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语…

VMware虚拟机安装Centos-7.9

VMware虚拟机安装Centos-7.9 创作不易,点赞关注一下吧 1.安装VMware Workstation Pro 大家根据自己的实际情况安装合适版本的VMware Workstation Pro,具体的安装推荐及各版本的下载链接大家可以看我之前发布的一篇博客:VMware Workstation Pro各版本下载链接汇总(特全!!!…

团队作业5——测试与发布(Alpha版本)

这个作业属于哪个课程 软件工程2024-双学位 (广东工业大学)这个作业要求在哪里 团队作业5——测试与发布(Alpha版本)一、Alpha版本测试报告 0. 进行测试 登录部分:失物招领部分:评价部分:1. 发现的问题 ①看不到自己的评论,也无法看到他人的评论 ②使用失物招领界面添加列…

16.5k star,开源推荐,go语言写的堡垒机

16.5k star,开源推荐,go语言写的堡垒机 原创 大侠之运维 大侠之运维 2024-05-04 00:02 江西teleport是一款go语言写的堡垒机,目前已经开源,可以自己部署体验下,teleport适合主机、kubernetes、数据库、RDP以及web服务。传送门:https://github.com/gravitational/teleport…

国芯科技产品系列

国芯科技产品系列 GX8003 高性能离线语音识别芯片 产品简介 GX8003是面向离线语音识别市场推出的高性能低成本SoC芯片。它集成了国芯第二代神经网络处理器 gxNPU V200,集成音频ADC、DAC,内置晶振和Flash。芯片支持高性能的语音唤醒,和自定义的离线语音指令识别。具有识别率高…

cass-4-cass常用指令

常见的画图顺序 先用cad命令画出图, 然后用右边的属性画出线, 然后用s命令把属性刷上去 app appload 加载插件 插件文件类型有at attach 吸附插入 可以加载图像,影像,dwg 需要指定三个参数app appaus 捕捉 是否打开捕捉 ctrl + a 开启编组功能 开启编组时选中要素是一整个对…

[网络爬虫] 网络爬虫实践:大麦网演唱会预约抢票

1 正常的最优抢票流程 1. 提前准备事项:设置登录密码、邮箱、解绑淘宝,账号绑定中只绑定【支付宝】操作路径:我的-账号安全-登录密码、邮箱设置提前设置好观演人、收货地址操作路径:我的-服务-观演人、收货地址注意事项:若绑定了多个观演人信息,记得把多余的先删掉,只留下…