2011-05-27 41 views
1

想使利用該方法提取getRotationMatrix()旋轉矩陣如下演算:轉化和乘旋轉矩陣的android我如何

SensorManager.getRotationMatrix(mRi, mI, mGData1, mMData2); 

SensorManager.getRotationMatrix(mRi, mI, mGData, mMData); 

//invert(mRi) and multiply it by mR, mRi and mR are float[] with length 16, is this the right way? I'm not getting any result. Rmult returns 0.   

Matrix.invertM(Rinv,0,mRi,0); 
Matrix.multiplyMM(Rmult, 0, Rinv, 0, mR, 0); 

我該怎麼辦呢?

回答

1

旋轉矩陣(沒有平移/比例/剪切)的逆矩陣是矩陣的轉置,即使用行作爲列。請注意,這是一個特殊情況,對於任何矩陣的轉置不是相反的,它只適用於旋轉矩陣。

這意味着在轉置矩陣中具有索引0,1,2,3的元素將是索引爲0,4,8,12的值,索引爲4,5,6,7的值將是具有索引1,5,9,13等的值。

雖然,如果你打算用後置乘以轉置,首先可能會更容易不是做轉置,因爲直接乘以一個矩陣的轉置更接近匹配存儲器佈局所以可以進行並行乘法運算(如果您希望儘可能使用SIMD)。

0

它看起來你使用的是opengl可能是因爲你使用的矩陣是android.opengl.Matrix函數,對吧?難道你的矩陣沒有所需的4x4(即float [16])格式?

我絕不是專家。