我使用Android重力和磁场传感器通过SensorManager.getRotationMatrix和SensorManager.getOrientation来计算方向。这给了我方位角,音高和方位号码。当设备平放在桌子上时,结果看起来很明智。当我的Android设备不平坦时,我应该如何计算方位角,俯仰角,方向?
不过,我有纵向和横向之间切换禁用清单中,让getWindowManager()。getDefaultDisplay()。getRotation()始终为零。当我将设备旋转90度以使其垂直时,我遇到了麻烦。有时候这些数字看起来相当不对,我意识到这与Gimbal lock有关。但是,其他应用程序似乎没有这个问题。例如,我将我的应用与两个免费的传感器测试应用(Sensor Tester (Dicotomica)和Sensor Monitoring (R's Software))进行了比较。我的应用在设备平坦时与这些应用一致,但是当我将设备旋转到垂直位置时,可能会有显着差异。这两个应用似乎彼此都认同,那么他们如何解决这个问题呢?
不幸的是,这对我从'SensorManager.getRotationMatrixFromVector'获得的旋转矩阵(使用传感器'TYPE_ROTATION_VECTOR')不起作用。当我计算'double a = Math.toDegrees(Math.atan((r [1] - r [3])/(r [0] + r [4])));'(其中r是旋转矩阵)我总是以-90 <='a' <= 90的角度结束 – Zardoz 2016-07-19 11:01:12