1

我正在尝试编写一个类SensorEventListener来确定手机摄像头朝向的方向(Galaxy S3),从磁北向东的度数。这是我正在使用的传感器:

  public void start()
  {
    mManager.registerListener(this, mManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD), SensorManager.SENSOR_DELAY_GAME);
    mManager.registerListener(this, mManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),  SensorManager.SENSOR_DELAY_GAME);
  }

我相信我正在寻找方位角,它mOrientation[0]在调用后存储在SensorManager.getOrientation(mRotationMatrix, mOrientation);.

但是,当我这样做时,结果似乎是围绕重力旋转,而不是从磁北旋转。难道我做错了什么?

4

1 回答 1

2

您需要在调用remapCoordinateSystem(inR, AXIS_X, AXIS_Z, outR);之前先调用getOrientation以获取后置摄像头的方向。然后azimuth是相对于磁北的方向。这相当于将设备坐标系的负 Z 轴投影到世界东西北平面,然后计算投影矢量与北轴之间的角度。

于 2013-07-02T06:27:15.733 回答