1. 程式人生 > >四元數的計算公式

四元數的計算公式

四元數的基本數學方程為 : 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度,其他的類似可以計算