四元数的计算公式

来源:互联网 发布:直播狗网络电视手机版 编辑:程序博客网 时间:2024/04/28 01:31

四元数的基本数学方程为 : q = cos (a/2) + i(x * sin(a/2)) + j(y * sin(a/2)) + k(z * sin(a/2)) 其中a表示旋转角度,(x,y,z)表示旋转轴

下面是如何把具体的四元数与旋转轴和旋转角度对应起来。
1.指出旋转轴和旋转角度,如何转化为四元素。
假定旋转轴是:RAxis = Z轴,换算成三维空间单位向量就是RAxis = [0 0 1],旋转60度
那么转化成四元数就是
q.w=cos(60°/2) = 0.866
q.x=RAix.x*sin(60°/2) = 0*0.5=0
q.y=RAix.y*sin(60°/2) = 0*0.5=0
q.z=RAix.z*sin(60°/2) = 1*0.5=0.5
例子验证:从三维空间中看,假定物体点A=[0 1 0],绕 RAxis = Z轴,旋转30度(假定顺时针为正,因为matlab就是顺时针为正,而下面的quat2dcm函数是matlab自带的)
那么物体点A旋转后在世界坐标系下的坐标将是B=[0.866 0.5 0],
如何用四元数计算出呢?思路是这样的:任何一个四元数对应着一个旋转3*3矩阵。
M=quat2dcm(q)*A’=[0.866;0.5;0],关于quat2dcm在软件matlab里面有。

2.指出四元数,怎么知道旋转轴和旋转角度呢。  假定q=[0.866,0,0,0.5](其实这个是上面的反例子而已)  q.w=cos(a/2) = 0.866  q.x=RAix.x*sin(a/2) = 0  q.y=RAix.y*sin(a/2) = 0  q.z=RAix.z*sin(a/2) = 0.5

从上面可以得到:RAix.x=RAix.y=0
由cos(a/2) = 0.866,得到
a = 60°或120°
由RAix.z*sin(a/2) = 0.5,得到
a = 60°或150°
因此a = 60°(四元数的旋转角度一般是在0-360之间,之后就是多一圈的问题。
于是可得RAix.z = 1,因此其他q=[0.866,0,0,0.5]意味着旋转轴是RAxis =[0 0 1],旋转角度是60°,其他的类似可以计算

对于使用弧度计算公式:
下面是如何把具体的四元数与旋转轴和旋转角度对应起来。
1.指出旋转轴和旋转角度,如何转化为四元素。
假定旋转轴是:RAxis = Z轴,换算成三维空间单位向量就是RAxis = [0 0 1],旋转60度
那么转化成四元数就是
q.w=cos((60/2)*pi/180) = 0.866
q.x=RAix.x*sin((60/2)*pi/180) = 0*0.5=0
q.y=RAix.y*sin((60/2)*pi/180) = 0*0.5=0
q.z=RAix.z*sin((60/2)*pi/180) = 1*0.5=0.5
例子验证:从三维空间中看,假定物体点A=[0 1 0],绕 RAxis = Z轴,旋转30度(假定顺时针为正,因为matlab就是顺时针为正,而下面的quat2dcm函数是matlab自带的)
那么物体点A旋转后在世界坐标系下的坐标将是B=[0.866 0.5 0],
如何用四元数计算出呢?思路是这样的:任何一个四元数对应着一个旋转3*3矩阵。
M=quat2dcm(q)*A’=[0.866;0.5;0],关于quat2dcm在软件matlab里面有。
2.指出四元数,怎么知道旋转轴和旋转角度呢。
假定q=0.866,0,0,0.5
q.w=cos((a/2)*pi/180) = 0.866
q.x=RAix.x*sin((a/2)*pi/180) = 0
q.y=RAix.y*sin((a/2)*pi/180) = 0
q.z=RAix.z*sin((a/2)*pi/180) = 0.5
从上面可以得到:RAix.x=RAix.y=0
由cos((a/2)*pi/180) = 0.866,得到
a = 60或120
由RAix.z*sin((a/2)*pi/180) = 0.5,得到
a = 60或150
因此a = 60度(四元数的旋转角度一般是在0-360之间,之后就是多一圈的问题。
于是可得RAix.z = 1,因此其他q=[0.866,0,0,0.5]意味着旋转轴是RAxis =[0 0 1],旋转角度是60度,其他的类似可以计算

0 0
原创粉丝点击