2013-03-01 53 views
0

搜索了一段時間後,我沒有找到任何方法來隔離旋轉時的平移加速方向。我正在尋找一種獨立於手機如何旋轉(當然與旋轉方式無關)的方式來獲得加速方向的方法。Android加速方向

基本上這可以讓我在加速,減速和方向改變之間做出區別。

我嘗試用getOrientation獲得的加速度傳感器角度進行補償,但是我試驗了當設備有平移運動(加速度)時,getOrientation角度(Azimut,pitch和roll)是不一樣的。

無論設備如何旋轉或方向值如何,無論設備如何加速,我都需要加速方向之一。

這可能嗎?

回答

0

終於找到了!

Android documentation之後我們可以通過旋轉矩陣(getRotationMatrix)來改變移動座標系:旋轉矩陣R將矢量從設備座標系轉換到世界座標系。

但在參數文件說(和這裏是測驗):

重力-is含有重力矢量 3個浮標陣列在設備的座標表示。您可以簡單地使用TYPE_ACCELEROMETER類型的傳感器的SensorEvent返回的值 。

那麼如果你使用的文件說加速度計值作爲旋轉矩陣上的參數,當然加速度將會受到影響,而移動翻譯和矩陣將是無用的。

而不是使用加速度傳感器的值,你必須使用重力感測數值(類型TYPE_GRAVITY

的傳感器,該傳感器不會與移動平移旋轉矩陣的影響可以用來當移動被翻譯。

在結束這爲我們工作的代碼如下:

float[] trueacceleration = new float[4]; 
float[] R = new float[16]; 
float[] RINV = new float[16];  

SensorManager.getRotationMatrix(R, I, GRAVITY, geomagnetic); 
Matrix.invertM(RINV, 0, R, 0);   
Matrix.multiplyMV(trueAcceleration, 0, RINV, 0, linearAcceleration, 0); 

  • 重力與來自TYPE_GRAVITY傳感器值向量,
  • geomangetic是與來自TYPE_MAGNETIC_FIELD傳感器值的向量,並且
  • linearAcceleration是從 TYPE_LINEAR_ACCELERATION傳感器與值的向量

然後,在我們有trueAcceleration矢量無論移動設備的方向如何移動,移動翻譯都會加速。