ついに見つけました!
Androidのドキュメントの後、回転行列(getRotationMatrix)を取得して、モバイルの座標系を変更できます。回転行列Rは、ベクトルをデバイスの座標系から世界の座標系に変換します。
しかし、パラメータのドキュメントには次のように書かれています(そしてここにクイズがあります):
重力-デバイスの座標で表される重力ベクトルを含む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);
どこ
- GRAVITYは、TYPE_GRAVITYセンサーからの値を持つベクトルです。
- geomangeticは、TYPE_MAGNETIC_FIELDセンサーからの値を持つベクトルであり、
- linearAccelerationは、TYPE_LINEAR_ACCELERATIONセンサーからの値を持つベクトルです。
次に、trueAccelerationベクトルでは、モバイルがその向きをどのように動かしても、モバイルの移動に加速があります。