Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何获取手机相对于地球的角度';地球磁场?_Android_Math_Magnetometer - Fatal编程技术网

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

Android 如何获取手机相对于地球的角度';地球磁场?,android,math,magnetometer,Android,Math,Magnetometer,我计划计算手机相对于地球磁场的角度。为此,我计划使用传感器。键入地磁旋转向量。在中,它解释了event.values返回的值与 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)的角度θ 获取当前角度,然后获取角度或比较属性,并将它们相互减去。对于旋转向量: x值是手机的“俯仰”:在0时,

我计划计算手机相对于地球磁场的角度。为此,我计划使用
传感器。键入地磁旋转向量
。在中,它解释了
event.values
返回的值与

  • 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)的角度θ


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

对于旋转向量:

x值是手机的“俯仰”:在0时,它面朝上;在-1时,它面朝地面。这将围绕右上图中的x轴旋转。

y值是手机的“偏航”:减小偏航逆时针旋转,增大偏航绕y轴顺时针旋转

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

每个坐标都是从-1到1的值,因为它们是三角函数。表示它们的x、y、z值等于单位四元数的最后三个分量(cos(θ/2)、xsin(θ/2)、ysin(θ/2)、z*sin(θ/2))。使用四元数超出了我的知识范围,但是如果你想了解它们是如何工作的,这里有一个教程

我了解如何理解这些值的方法来自于在这个API中玩手机的俯仰/偏航/滚动来模拟android手机上的运动

例如,一部偏航为0、俯仰为0、滚动为0的手机平放,屏幕朝上(朝向天空),手机顶部指向北方(再次使用SensorSimulator,您将能够更好地将其可视化,很难用文字解释)

如果希望有一种简单的方法来计算对地球坐标系的引用,请在SensorManager上调用getRotationMatrix()

下面是使用旋转向量的程序演示: