可视化分析四元数计算三维旋转叉乘共轭四元数及使用半角的原因

这篇文章[从数学角度证明轴角转换为四元数计算三维旋转要使用半角?],但是太抽象了,这里利用坐标系将计算过程可视化,看看叉乘共轭四元数究竟起到什么作用.

利用四元数q计算三维向量v绕e轴旋转θ角,设v对应的四元数为p,假设e,p,q都为单位四元数.

罗德里格旋转公式计算结果: v’ = cosθ*v + sinθ*(e x v) + (1 - cosθ)*(v·e)e (1)

如果q x p不乘以共轭四元数,看一下是什么结果.
p0 = q * p = (qw + qv) x (pw + pv)
= pw*qw - (qv · pv) + pw*qv + qw*pv + qv x pv
= 0*qw - (qv · pv) + 0*qv + qw*pv + qv x pv
= -pv·qv + qw*pv + qv x pv … (8)

(8)式转换为四元向量来计算:qv = e*sin(θ/2); pv = v; qw= cos(θ/2);
v0 = -(v·e)*sin(θ/2) + cos(θ/2)*v + sin(θ/2)*(e x v)...... (9)
(9)式跟(1)式罗德里格公式明显不一样,说明这么做是错误的.
如果使用全角来计算, (9)式中的θ/2改为θ,再看看结果:
v0 = cosθ*v + sinθ*(e x v) - sinθ*(v·e) ...... (10)
对比(1)式,(10)式看起来比较接近正确的值,当然(10)式仍然是错误的.
下面分析一下(10)式为什么是错误的.

两个复数相乘z*b相当于复平面内向量b根据z的数据进行伸缩或旋转,可以认为z对b进行变换.如果z,b都是单位向量,相当于b在单位圆上旋转,大小不变.
需要注意,b在单位圆上旋转的意思是,单位圆上所有的单位向量都在旋转,而向量b只是其中的一个.

四元数相乘q * p同样如此,四元向量p根据q的数据在四维空间中伸缩或旋转,若q单位四元数,p根据q的数据在四维空间中旋转,大小不会变化.
但与复平面中1个单位圆旋转不同,四维空间中的四元向量的旋转涉及到两个圆的旋转,这里简称q圆和p圆.
而且四维空间中的q圆和p圆不仅同心,同半径,而且互相不完全相交.
当然,三维空间的你不可能想象p圆/q圆在四维空间如何旋转,不过只需要研究其在三维空间的旋转就可以了,毕竟最终的目的是解决三维向量的旋转问题.
将q圆和p圆投影到三维空间中,其中q圆投影到q线,下图是投影:
在这里插入图片描述
可以看出,p圆垂直于q线.图2中那条红色的虚线一会儿再说.
图1是初始状态,注意四元向量<1,0,0,0>,p*,p投影到三维空间中坐标位置.
图2是(10)式旋转完成后的状态,先分析q * 1.
q * 1的意思在四维空间中用q来变换<1,0,0,0>,所以适用右手法则.所以q线向右滑动.
1坐标移动到q位置,q*坐标移动到1位置,p圆逆时针旋转θ角度到p’.
图2中q线上方的红色1,q*就是旋转完成后这两个向量的新位置.q线下方蓝色q*,1,q表示原来的位置.

那么为什么p会逆时针旋转θ角度到p’位置呢?
前面有一段红色的文字"需要注意,b在单位圆上旋转的意思是,单位圆上所有的单位向量都在旋转,而向量b只是其中的一个".
这里的意思也一样,p,1,q,q*都是单位向量,它们都位于四维单位球上,四元向量<1,0,0,0>旋转到q位置,意味着整个单位球都在旋转(只是我们无法想象四维球的旋转方式),球上所有四元单位向量的方向都有可能发生变化(当然也有不变的),所以位于单位球上的p圆,q圆也在旋转,p,q,q*,1的方向都会发生变化.
继续往下分析.

先不管(10)式是不是正确,但(10)式中有这一项"- sinθ(v·e)"这是一个标量,它位于四维坐标系中的实轴位置上.但是别忘了,毕竟计算的是三维向量p在三维空间中的旋转,只是计算过程放在了四维空间中,但结果p’仍然应该在三维空间中.
这句话的意思是,四元向量p固然位于四维空间中,但它的实轴分量为0,所以实际应用到的只有i,j,k三个虚轴分量.而且无论四维单位球有多么不可想象,它总有一部分位于三维空间ijk坐标系中,用向量来描述,这部分四维向量的实轴分量为0,它们的i,j,k三个分量可以没有任何变化的投影到三维空间组成一个三维球,这里简称为单位球.类似三维球与i,j平面相交的赤道,赤道上的向量实轴分量为0,这些向量的i,j分量可以没有任何变化地投影到i,j平面上.
而p正是位于单位球上的四元向量,忽略掉实轴的0分量后,它的i,j,k分量在三维或四维空间中是一样的,所以才能将p放到四维空间中来计算三维旋转.
因此,q * p的计算结果p’也应该位于单位球上,实轴分量为0,否则将p旋转到四维空间中,你就没办法在三维空间中应用旋转的结果了.

那么(10)式计算结果p’能不能继续旋转,将直到实轴分量为0呢?答案是不能,因为q * p意味着是p只能根据q的数据旋转θ角度,不能胡乱旋转,哪怕你能拼凑出正确的结果(当然你也拼凑不出来,否则违反了宇宙法则之一----数学规律).

(9)式用半角来计算: p0 = q * p,结果依然如此,同样有一个分量"-(v·e)*sin(θ/2)"旋转到了实轴位置,而计算结果与正确结果(1)式罗德里格旋转公式差别更大.

下面再分析正确的结果: p’’ = p0 x p* = q x p x q*,叉乘q*究竟起到什么作用?p旋转的结果p’‘究竟在哪个位置?
先看一下正确的结果,也就是罗德里格旋转公式:
p'' = (1-cosθ)*(v·e)e·<i,j,k> + cosθ*v·<i,j,k> + sinθ*(e x v)·<i,j,k> ...... (11)
很明显,p’‘的实轴分量为0.当然,某个虚轴i,j,k分量也许也是0,不过没关系,只要p’'位于三维空间中就行.

下图3的p圆/q圆投影是(9)式对应的旋转结果,:
在这里插入图片描述
(9)式为p0 = q x p的结果,只不过要用半角θ/2,q右乘p,仍然适用右手法则.
q线向右滑动,1从原坐标移动到p位置;q*从原坐标移动到1位置.
与(10)式相比较也就是图2,可以发现虽然1都移动了|q|距离,但p旋转的角度不同,最终的位置也不同,图2中是p’,图3是p0.

p0再叉乘q*会怎样旋转呢?也许会有人认为p0会顺时针旋转,观察下图4:
在这里插入图片描述
p0继续逆时针旋转θ/2角度到p’’,而不是顺时针旋转,这个位置是(11)式正确结果的位置,也就是就是p最终旋转到位置p’’.
下面分析一下为什么会这样.
p’’ = p0 x q*,如果用右手法则来解释,相当于用p0来变换q*,也就是说q*要按照p0的数据在四维空间中旋转,然而我们需要的是用q*来变换p0,让p0按照q*的数据在四维空间中旋转,这个时候就需要使用左手法则.
使用左手法则,1应该向左移动还是向右移动呢?
当然向左移动啦,因为q*是q的共轭向量,它与q大小相同,方向相反,不管你是用哪个法则,但凡用q*变换的一个向量,旋转方向都要与q的方向相反.
q线向左滑动,1从(图3)中的q位置移动回原坐标;q*从(图3)中的1位置移动到原坐标.q线上的所有坐标都回到原位置.
根据左手法则,p圆继续逆时针旋转θ/2角度到p’’.

还有一个问题,对比图2和图4,p’和p’‘在p圆上的位置一样,那么它们对应的四元向量也应该相同,但为什么不相同呢?
仔细观察图2和图4中的红色虚线,发现没有,p’,p’'虽然在p圆上的位置相同,但相对于1的位置却是不同的,为什么?
原因是p圆的位置发生了变化.在图2中,q线向右移动|q|距离后,1移动到q位置,然后不再有任何变化.图2中,"q线向右滑动|q|距离"就相当于p圆相对于q线向左移动|q|距离到q*位置,即p圆在旋转的同时,也会沿着q线移动.
在图3,图4中,也会发生同样的事情,p圆也会相对于q线的滑动方向反向移动.不过在这里, p圆却分两次移动.第一次在图3中像图2那样,相对于q线向左移动到q*位置;第二次在图4中,相对于q线又从q*位置移回了1位置.
既然p圆的位置不同,自然p圆上的四元向量肯定也不一样,哪怕看起来都在圆上的同一位置.

笔者按:以上是笔者学习这部分内容时思考差不多一周的结果,所以要记录下来,免得以后忘记。另外,不敢保证所有内容都是正确的,希望看到这篇文章的朋友能够在评论区指出错误,共同学习,不胜荣幸。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值