Android SensorManager.java getOrientation和getRotationMatrix算法

ste*_*syy 5 algorithm math android physics orientation

我试图弄清楚如何getRotationMatrix()getOrientation()正确地工作.

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

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

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

你可以去这个网站 看看代码

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

Bet*_*eta 1

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

第二个答案:根据该代码,滚转俯仰角和方位角是根据旋转矩阵的元素计算的,而旋转矩阵的元素又是从三个空间向量的分量导出的。乍看上去,

tan(方位角) = M y /H y
sin(俯仰角) = -A y
tan(横滚角) = -A z /A x

(这是否是足够的答案取决于您对三角学和可视化 3 空间中的旋转的熟悉程度。)