四元数的旋转公式计算

  1. 复数.
    复数表示二维的一个方向,或者一个二维向量.
    容易证明: a,b,c是复数, a=b*c 能推导出 |a|=|b||c|

用复数的 reiθ表达容易证明.

几何上: 一个数字乘3+4i,就相当于这个数字放大到原来的5倍,再逆时针旋转arctan43度。 (以为复数在坐标系上表示(x,y)所以表示旋转 arctan y/x)

三维旋转的常规办法那么我们怎么表示三维空间上的旋转呢?有两个办法:1)一个直观的办法是,绕x轴旋转多少度,然后再绕y轴旋转多少度,再绕z轴旋转多少度(实际上绕两个坐标旋转就可以表示所有类型的旋转了)。但是这样有个问题是,得旋转两次。而且这种旋转方式有个问题,就是“万向节死锁”,就是三个旋转轴在某种情况下会“退化”为两个旋转轴。这个有很多视频讲这个,我用文字讲的话不太直观,你找个视频看,一看就懂了。

3 .
那就用四维中的数来表示吧,也就是搞出来一个四元数:一个实轴加上三个虚轴:x=a+bi+cj+dkx=a+bi+cj+dk 这玩意的运算怎么定义呢?i2=-1,j2=-1,k2=-1i2=-1,j2=-1,k2=-1 那么,ijk这三个数字互相乘等于多少呢?可以这么定义:ij=k,jk=i,ki=jij=k,jk=i,ki=j 这个怎么理解呢?就是你看三维的XYZ坐标轴,我们看右手系,你把X转到Y轴,Y转到Z轴,Z转到X轴,这个轴是“不变”的(当然我这么说不严谨,你大概理解就好),就是说三维中的物体做刚体变换,你把XYZ轴转到了YZX轴,你完全可以“等价”地表示这个物体(当然我这里用等价这个词其实很不严谨,你大概理解就好)。我刚才写的ijk的三个式子,就是相当于把XYZ三个坐标给转了一下。再加上一条:ijk=-1ijk=-1
四元数乘法不满足交换律

但是到三维中就不是这么回事了,一个魔方,你先绕着x轴逆时针转90度,在绕着y轴逆时针转90度,和你先绕y轴逆时针转90度,再绕x轴逆时针转90度,效果是不一样的。这是因为,三维中的旋转,不止一个旋转轴。

四元数可以理解为复数的扩展。一个复数,它的实轴单位是1,虚轴单位是i, 1×1=1,i×i=1,1×1=1,i×i=1,这个的一种理解方式是,虚轴上的数字相当于旋转90度,旋转两次就旋转到了180度,转到了实轴上的负半轴。

这里面×1 表示把一个复数的实部放大多少倍. ×i表示逆时针旋转90度.(从欧拉表达来看), 所以 ×i×i 表示旋转2次逆时针90度. 所以等于 模长不变, 辐射角加 180度. 从欧拉公式知道e的ipi次幂等于-1.

image

posted on   张博的博客  阅读(7)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
历史上的今天:
2024-02-19 阅读sora论文
2024-02-19 vim 配置指南 和mobaXterm的最爽使用方案
2024-02-19 活体检测的算法思路
2023-02-19 教你如何游戏里面禁止ctrl+shift 切输入法
2019-02-19 修改pudb颜色
2019-02-19 通过该源码修改vim颜色和pudb调试器的代码颜色的方法

导航

统计

点击右上角即可分享
微信分享提示