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

时间:2014-11-13 22:36:32

标签: android math magnetometer

我计划计算手机相对于地球磁场的角度。为此我计划使用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 个答案:

答案 0 :(得分:2)

对于旋转矢量:

x值是手机的“音高”:0表示正面朝上,-1表示面向地面。它围绕右上图中的x轴旋转。

y值是手机的“Yaw”:减少偏航逆时针旋转,增加它绕y轴顺时针旋转。

z值是手机的“Roll”:增加或减少滚动会使手机绕z轴旋转。

每个坐标都是从-1到1的值,因为它们是三角函数。 Android Documentation表示它们的x,y,z值等于单位四元数的最后三个分量(cos(θ/ 2),x sin(θ/ 2),y sin(θ/ 2),z * sin(θ/ 2))。使用四元数超出了我的知识范围,但如果您想了解它们的工作原理,这里有一个教程。 http://3dgep.com/understanding-quaternions/

我想出如何理解这些值的方式来自于在此API中使用手机的俯仰/偏航/滚动来模拟Android手机上的移动https://code.google.com/p/openintents/wiki/SensorSimulator

例如,Yaw为0,音高为0,Roll为零的手机平放,屏幕向上(朝向天空),手机顶部朝北(再次使用SensorSimulator播放)并且你将能够更好地想象这一点,通过单词解释真的很难)

如果您想要一种简单的方法来计算对地球坐标系的引用,请在SensorManager上调用getRotationMatrix(): Android doc

以下是使用旋转向量的程序演示:https://android.googlesource.com/platform/development/+/master/samples/ApiDemos/src/com/example/android/apis/os/RotationVectorDemo.java

答案 1 :(得分:-4)

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