終於找到了!
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矢量無論移動設備的方向如何移動,移動翻譯都會加速。