0

잠시 동안 검색 한 후 회전에서 변환 가속 방향을 분리 할 방법을 찾지 못했습니다.Android 가속 방향

저는 휴대 전화가 어떻게 회전하는지 (그리고 회전하는 방법과는 독립적으로) 가속 방향을 얻는 방법을 찾고 있습니다.

기본적으로 이렇게하면 가속, 감속 및 방향 변경간에 차이를 만들 수 있습니다.

가속도 센서 각도를 getOrientation에서 얻은 각도로 보정하려고 시도했지만 장치에 평행 이동 (가속)이있는 경우 getOrientation 각 (Azimut, pitch, and roll)이 동일하지 않은 것을 실험했습니다.

가속화 방향에 상관없이 장치가 회전하는 방법이나 방향 값에 관계없이 둘 중 하나가 필요합니다.

그게 가능합니까?

답변

0

마침내 발견했습니다!

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 센서로부터의 값을 갖는 벡터이고 모바일 번역에서의 가속, 모바일이 방향을 어떻게 움직이든 상관 없습니다.