我正打算计算手机与地球磁场的夹角。为此,我计划使用Sensor.TYPE_GEOMAGNETIC_ROTATION_VECTOR。在Geomagnetic Rotation Vector中,它解释了event.values返回的值与Rotation Vector中的值相同,即,
x*sin(θ/2)
y*sin(θ/2)
z*sin(θ/2)
COS(Th/2)
上述给定值中的x,y,z值是什么?通过使用这些值,我可以计算手机的x轴和地球的x轴之间的角度,手机的y轴和地球的y轴之间的角度,手机的z轴和地球的z轴之间的角度?
p.s.:θ被描述为围绕轴(x、y或z)的角θ。

最佳答案

对于旋转矢量:
x值是手机的“音高”:0时面朝上,1时面朝地面。这将围绕上图中的x轴旋转。
y值是手机的“偏航”:减小偏航将逆时针旋转,增大偏航将围绕y轴顺时针旋转。
Z值是手机的“滚动”:增大或减小滚动可使手机绕Z轴旋转。
每个坐标都是从-1到1的值,因为它们是三角函数。Android Documentation表示它们的x、y、z值等于单位四元数的最后三个分量(cos(θ/2)、x sin(θ/2)、ysin(θ/2)、z*sin(θ/2))。使用四元数超出了我的知识范围,但如果你想了解它们是如何工作的,这里有一个教程。http://3dgep.com/understanding-quaternions/
我了解如何理解这些值的方法来自于在这个api中玩手机的俯仰/偏航/侧翻,用于在android手机上模拟移动https://code.google.com/p/openintents/wiki/SensorSimulator
例如,偏航为0、俯仰为0、滚动为0的手机是平放的,屏幕向上(朝向天空),手机顶部指向北方(再次播放传感器模拟器,您将能够更好地看到这一点,这真的很难用语言解释)
如果您想有一个简单的方法来计算对地球坐标系的引用,请在传感器管理器上调用getRotationMatrix():
Android doc
下面是使用旋转矢量的程序演示:https://android.googlesource.com/platform/development/+/master/samples/ApiDemos/src/com/example/android/apis/os/RotationVectorDemo.java

10-07 19:35
查看更多