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
    }
}

现在,我可以从“方向” float []中获得方位角,俯仰和横滚值.方位角和侧倾值一切都很好(它返回正确的角度),但是当我打印音高值(orientation [1])时,我总是获取PI / 2和-PI / 2之间的角度.我不明白为什么?我无法获取大于PI / 2或小于-PI / 2的角度.一旦我的角度为-PI / 2,并且继续旋转设备(三星Galaxy S2),该角度在达到PI / 2值后突然减小.

谁能解释为什么俯仰角如此罕见?

提前致谢!

解决方法:

螺距的计算公式为:pitch =(float)Math.asin(-RMatrix [7]); arcsin函数的范围是[-PI / 2,PI / 2],因此asin只能取-PI / 2和PI / 2之间的值.

上一篇:python根据坐标点的坐标计算角度


下一篇:java – 碰撞检测:圆角对象