当我的Android设备不平坦时,我应该如何计算方位角,俯仰角,方向?

前端之家收集整理的这篇文章主要介绍了当我的Android设备不平坦时,我应该如何计算方位角,俯仰角,方向?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用 Android重力和磁场传感器通过SensorManager.getRotationMatrix和SensorManager.getOrientation来计算方向.这给了我方位角,俯仰和方位数.当设备平躺在桌子上时,结果看起来很明智.

但是,我已经在清单中禁用了纵向和横向之间的切换,所以getWindowManager().getDefaultDisplay().getRotation()始终为零.当我将设备旋转90度,使其处于垂直状态时,遇到麻烦.有时这个数字似乎是错误的,我已经意识到这与Gimbal lock有关.但是,其他应用似乎没有这个问题.例如,我将我的应用程序与两个免费的传感器测试应用(Sensor Tester (Dicotomica)Sensor Monitoring (R’s Software))进行了比较.我的应用程序在平板设备上同意这些应用程序,但是当我将设备旋转到垂直位置时,可能会有显着差异.这两个应用程序似乎相互一致,那么他们如何解决这个问题呢?

解决方法

我认为,当设备不平坦时,定义定向角度的最佳方式是使用更适合的角度坐标系,即从SensorManager.getOrientation(…)获取的标准欧拉角度.我建议我描述一个 here on math.stackexchange.com.我还把一些代码实现它在 an answer here.除了方位角的一个很好的定义,它还有一个定义的俯仰角,这正是Math.acos给出的角度(rotationMatrix [8])在另一个答案这里提到.

您可以从我在第一段中给出的两个链接中获得完整的详细信息.但是,总而言之,来自SensorManager.getRotationMatrix(…)的旋转矩阵R是

其中(Ex,Ey,Ez),(Nx,Ny,Nz)和(Gx,Gy,Gz)是指向东,北和在重力方向上的向量.然后你想要的方位角由…给出

猜你在找的Android相关文章