我计划计算手机相对于地球磁场的角度。为此我计划使用Sensor.TYPE_GEOMAGNETIC_ROTATION_VECTOR
。在Geomagnetic Rotation Vector中,它解释了event.values
返回的值与Rotation Vector中的值相同,
上述给定值中的x,y,z值是多少?通过使用这些值我可以计算手机的X轴和地球的X轴,手机的Y轴和地球的Y轴,手机的Z轴和地球的Z轴之间的角度吗?
P.S。:θ被描述为围绕轴(x,y或z)的角度θ
答案 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)
获取手机的当前角度,然后获得比较的角度或属性,并相互减去它们。