마침내 발견했습니다!
Android documentation 이후에는 회전 매트릭스 (getRotationMatrix)를 사용하여 모바일의 좌표계를 변경할 수 있습니다. 회전 행렬 R은 벡터를 장치 좌표계에서 세계 좌표계로 변환합니다.
하지만 파라미터 문서 (퀴즈는 여기) 메시지 :
중력 중력 벡터 함유 수레 3의 배열은 장치의 좌표로 표현 -is. 유형이 TYPE_ACCELEROMETER 인 Sensor의 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);
경우
012 3,516,
- 중력
- geomangetic가 TYPE_MAGNETIC_FIELD 센서로부터의 값을 갖는 벡터이고, TYPE_GRAVITY 센서로부터의 값을 갖는 벡터이고,
- linearAcceleration 우리가 가진 trueAcceleration 벡터에
이어서 TYPE_LINEAR_ACCELERATION 센서로부터의 값을 갖는 벡터이고 모바일 번역에서의 가속, 모바일이 방향을 어떻게 움직이든 상관 없습니다.