Android SensorManager.java getOrientation 和 getRotationMatrix 算法

Posted

技术标签:

【中文标题】Android SensorManager.java getOrientation 和 getRotationMatrix 算法【英文标题】:Android SensorManager.java getOrientation and getRotationMatrix algorithm 【发布时间】:2011-03-29 05:08:49 【问题描述】:

我正在尝试弄清楚 getRotationMatrix()getOrientation() 是如何工作的。

到目前为止,我已经知道在getRotationMatrix() 函数中,它将重力矢量与磁矢量相乘以获得指向东方的新矢量。然后,它再次将东矢量与重力矢量相乘,得到指向磁北的矢量。按照article的这个说法,现在我们有了三个正交向量,就可以组成一个旋转矩阵了。

这是我的第一个问题:为什么我们要再次将东矢量与重力矢量进行叉积以获得指向磁北的矢量?原磁矢量不是指向磁北吗?新矢量和原磁矢量有什么区别?

说到getOrientation(),这是我的第二个问题:方位角、滚转和俯仰角是怎么产生的?有什么方程式或公式可以解释吗?

你可以去这个website看代码

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

【问题讨论】:

非常非常好的问题! 【参考方案1】:

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

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

tan(azimuth) = My/Hy sin(pitch) = -Ay tan(roll) = -Az/Ax

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

【讨论】:

亲爱的Beta:感谢您的回答,很抱歉没有把我的第二个问题说清楚。我知道这三个角度来自旋转矩阵,但为什么它们看起来像那样?它们必须来自某个地方。我想知道这些方程背后的原理或公式。谢谢!!

以上是关于Android SensorManager.java getOrientation 和 getRotationMatrix 算法的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )

android 21 是啥版本

Android逆向-Android基础逆向(2-2)

【Android笔记】android Toast

图解Android - Android核心机制

Android游戏开发大全的目录