2015-11-02 210 views
0

我將旋轉矩陣從一幀旋轉到另一幀。程序的目標是使我的陀螺與地球平行,這意味着輸出矢量應該有前兩個數字零和第三個-9.81。 代碼:Matlab中的旋轉矩陣

vs1 = 1; 
vs2 = -0.003; 
vs3 = -9.808; 

vst = [vs1 vs2 vs3]'; 

alpha = (acosd(vs1/sqrt(vs1^2+vs2^2))); 

gama = (acosd(vs2/sqrt(vs1^2+vs2^2))); 

beta = (acosd(vs3/sqrt(vs1^2+vs2^2+vs3^2))); 
R1 = [(cosd(gama)*cosd(beta)*cosd(alpha))-(sind(gama)*sind(alpha)) (cosd(gama)*cosd(beta)*sind(al)+sind(gama)*cosd(al)) (-cosd(gama)*sind(beta));((-sind(gama)*cosd(beta)*cosd(alpha))-cosd(gama)*sind(alpha)) ((-sind(gama)*cosd(beta)*sind(alpha))+(cosd(gama)*cosd(alpha))) sind(gama)*sind(beta);sind(beta)*cosd(alpha) sind(beta)*sind(alpha) cosd(beta)]; 
disp (R1*vst) 

結果爲VS1,VS2和VS3是:-0.00599,0.0000359和9.858845622079866。首先,我不明白爲什麼程序給我積極的Z,爲什麼它不會讓前兩個數字爲零?

在此先感謝

+0

這是一個錯誤或一個誤解。在這兩種情況下,您都是解決問題的最佳人選。請嘗試將代碼分解爲較小的部分,並仔細檢查每一部分。例如,定義R1的行危險地過長。 – Ratbert

回答

0

你在你的代碼中的錯誤。如果我正確地跟蹤代碼,有兩個地方我認爲變量「al」實際上應該是「alpha」。

但是您的代碼還會爲這些輸入生成alpha = 90和gama = 180。你所要做的就是用這些輸入將軸翻轉到機器精度之內,所以它不會達到你要找的結果。

1)你確定輸入矢量是否正確?爲什麼如果你幾乎是垂直的(Z = -9.808),重力的值接近X = 1?

+0

你完全正確。它不應該是1.但無論如何對於vs1的任何數字,如果我把負數(對於vs2)結果不好。 –

+0

鑑於生成的角度alpha和gama,我首先會問他們是否正確計算。你是否嘗試過像vst = [1,1,1]這樣的輸入來查看它是否會生成一組合理的角度? – txpaulm