加速度計と磁場センサーを使用してAndroidでコンパスをプログラムしようとしていますが、コンパスの正しい角度を取得する方法を考えています。
加速度計と磁場センサーの値をそれぞれ「加速度」と「磁気」で読みました。角度を取得するために、次の手順を実行します。
float R[] = new float[9];
float I[] = new float[9];
boolean success = SensorManager.getRotationMatrix(R, I, accele, magne);
if(success) {
float orientation[] = new float[3];
SensorManager.getOrientation(R, orientation);
azimuth = orientation[0]; // contains azimuth, pitch, roll
....
後で、回転行列を使用して針を配置します。
rotation.setRotate(azimuth, compass.getWidth() / 2, compass.getHeight() / 2);
canvas.drawBitmap(needle, rotation, null);
ここで、getOrientationのドキュメントには、orientation[0]はz軸を中心とした回転である必要があると記載されています。TYPE_ORIENTATIONのドキュメントには、「方位角、磁北方向とy軸の間の角度、z軸(0〜359)を中心に」と記載されています。0=北、90 =東、180 =南、270=西。
ただし、私の方位角は0から359の間ではなく、-2から2程度です。getOrientationからの方位角は正確には何ですか。角度に変換するにはどうすればよいですか。