Android SensorManager.java getOrientation和getRotationMatrix算法

时间:2011-03-29 05:08:50

标签: android algorithm math orientation physics

我想知道getRotationMatrix()getOrientation()的确切工作方式。

到目前为止,我已经知道在getRotationMatrix()函数中,它使用磁矢量交叉产生重力矢量,以获得指向东方的新矢量。然后,它再次使用重力矢量交叉产生东向量,以使向量指向磁北。根据这个article说,现在我们有三个正交向量,我们可以形成一个旋转矩阵。

这是我的第一个问题:为什么我们应该再次使用重力矢量来交叉产生东向量以获得指向磁北的向量?原始磁矢量是不是指向磁北?新载体和原始磁矢量之间有什么区别?

说到getOrientation(),这是我的第二个问题:方位角,滚动和音高如何出现?是否有任何方程式或公式可供解释?

您可以转到此website查看代码

非常感谢您的关注。非常感谢!

1 个答案:

答案 0 :(得分:1)

第一个答案:磁矢量指向(磁)北,也可能稍微向上或向下。第二个交叉积的目的是在水平面上得到一个矢量,指向(磁)北。

第二个答案:根据该代码,滚动俯仰和方位角是根据旋转矩阵的元素计算的,旋转矩阵的元素又是从三个空间矢量的分量导出的。一目了然,

tan(方位角)= M y / H y
sin(pitch)= -A y
tan(roll)= -A z / A x

(这是否足够的答案取决于你对三维空间的舒适程度以及三维空间中的旋转可视化。)