全局四元数转换为局部四元数

时间:2014-05-08 16:56:27

标签: math rotation quaternions

我正在使用四元数,我有一点问题。

我有一个对象(紫色线)和一个四元数相对于旋转轴(黑线),我想转换 局部空间中的此四元数,以便旋转轴成为对象

我需要计算物体的滚动(我将转换为轴角度的局部空间中的Y旋转),然后计算轴中的X和Z旋转角

这是一个让我更好地理解这个问题的方案:

Schema

要理解你可以想到你的肩膀,当你移动你的手臂时你有X和Z将确定前臂的位置,Y将确定你的手肘的旋转。

请不要犹豫要求澄清,因为我很难理解我在寻找什么。

我可以使用这样的公式或算法吗?

是否有3D程序员使用四元数并且可以用算法或单词来澄清我的主题?

1 个答案:

答案 0 :(得分:1)

您正在寻找四元数q,使得qjq'= n,其中n是表示对象轴的虚数单位四元数。就产品jn而言,这有一个标准的解决方案,基本上是平方根。

如果

jn=c+s*e, e imaginary unit, c²+s²=1, s>=0

然后

q = sqrt(0.5*(1+c)) + sqrt(0.5*(1-c))*e

所以计算

p=j*n // condition is n is imaginary unit
c=real(p)
e=imag(p)
s=abs(e)
if(s>0) e=e/s else e=j 
s=sqrt(0.5*(1-c))
c=sqrt(0.5*(1+c))
q=c+s*e

另见https://stackoverflow.com/a/23414774/3088138