如何获取手机相对于地球磁场的角度?

4
我打算计算手机相对于地球磁场的角度。为此,我计划使用Sensor.TYPE_GEOMAGNETIC_ROTATION_VECTOR。在Geomagnetic Rotation Vector中,它解释了event.values返回与Rotation Vector中相同的值,即:

  • x * sin(θ/2),
  • y * sin(θ/2),
  • z * sin(θ/2),
  • cos(θ/2)

上述给定值中的x、y、z值是什么?通过使用这些值,我能计算出手机X轴与地球X轴、手机Y轴与地球Y轴以及手机Z轴与地球Z轴之间的角度吗?

P.S.:θ被描述为绕轴(x、y或z)旋转的角度θ。

Phone's X,Y and Z axis Earth's X,Y and Z axis

2个回答

2
对于旋转向量:
x 值是手机的“俯仰角”:当值为 0 时,手机正面朝上;当值为 -1 或 1 时,手机正面朝向地面。在上图中,它绕 x 轴旋转。
y 值是手机的“偏航角”:减小偏航角会使手机逆时针旋转,增加偏航角会使手机顺时针绕 y 轴旋转。
z 值是手机的“翻滚角”:增加或减小翻滚角会使手机绕 z 轴旋转。
每个坐标都是-1到1之间的值,因为它们是三角函数。Android文档指出,x、y、z值等于单位四元数的最后三个分量(cos(θ/2), x*sin(θ/2), y*sin(θ/2), z*sin(θ/2))。使用四元数超出了我的知识范围,但如果您想学习它们的工作原理,这里有一个教程http://3dgep.com/understanding-quaternions/
我找到了理解这些值的方法,是通过在此API中模拟移动时调整手机的俯仰/偏航/翻滚https://code.google.com/p/openintents/wiki/SensorSimulator
例如,一个偏航角为0,俯仰角为0,翻滚角为0的手机是平放的,屏幕朝上(朝向天空),手机顶部指向北方(通过SensorSimulator玩耍可以更好地可视化这一点,很难用语言解释)。
如果您想要一种简单的方法来计算与地球坐标系的参考,请在SensorManager上调用getRotationMatrix(): Android文档 这里有一个使用旋转向量的程序演示:https://android.googlesource.com/platform/development/+/master/samples/ApiDemos/src/com/example/android/apis/os/RotationVectorDemo.java

-5

获取手机当前的角度,然后获取比较的角度或属性,并将它们相减。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接