Android SensorManager.getOrientation()返回-PI/2和PI/2之间的间距



我正在设计一个应用程序,需要检查设备的方向(方位角、俯仰和滚转)。我使用以下代码来实现这一点:

@Override
public void onSensorChanged(SensorEvent event) {
    if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
        gravityMatrix = event.values.clone();// Fill gravityMatrix with accelerometer values
    else if(event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD)
        geomagneticMatrix = event.values.clone();// Fill geomagneticMatrix with magnetic-field sensor values
    if(gravityMatrix != null && geomagneticMatrix != null){
        RMatrix = new float[16];
        IMatrix = new float[16];
        SensorManager.getRotationMatrix(RMatrix, IMatrix, gravityMatrix, geomagneticMatrix);// Retrieve RMatrix, necessary for the getOrientation method
        SensorManager.getOrientation(RMatrix, orientation);// Get the current orientation of the device
    }
}

现在,我可以从"方位"浮动[]中获得方位角、俯仰和滚转值。方位角和滚转值都很好(它返回正确的角度),但当我打印俯仰值(方位[1])时,我总是检索PI/2和-PI/2之间的角度。我不明白为什么?我无法检索大于PI/2或小于-PI/2的角度。一旦我的角度为+-PI/2,并且我继续旋转我的设备(三星Galaxy S2),角度在达到PI/2值后突然减小。

有人能解释一下为什么俯仰角表现得如此罕见吗?

提前感谢!

Pitch计算为pitch = (float) Math.asin(-RMatrix[7]);arcsin函数的范围为[-PI/2, PI/2],因此asin只能取介于-PI/2PI/2之间的值。

相关内容

  • 没有找到相关文章

最新更新