使用重力确定世界参考框架?

时间:2013-10-07 20:48:19

标签: android accelerometer android-sensors gravity

我正在使用Android上的计步器。为了改善它,我很想从所有其他力量中抽出垂直力。

文档表明,由于不准确,不应再使用方向传感器,因此我正在寻找其他方法。

我的想法是:使用'TYPE_GRAVITY'传感器确定实际垂直轴是什么(从地球的核心到天空),然后使用该信息旋转TYPE_LINEAR_ACCELERATION数据,然后仅使用想要的轴。

我在想,这可能吗?或者是否无法计算单个[x,y,z]重力矢量所需的旋转?

1 个答案:

答案 0 :(得分:4)

我会尝试从物理学角度而不是Android /编程观点来解决这个问题:

假设TYPE_GRAVITY传感器返回一个向量 G = [x G ,y G ,z G ]。

TYPE_LINEAR_ACCELERATION传感器返回另一个向量 A = [x A ,y A ,z A ]。

您正在寻找的是 A G 方向上向单位矢量投影的幅度。换句话说, A 中有多少是 G 的方向?

首先我们需要在 G 的方向上获得单位向量,我们称之为 G unit (看看我做了什么那里?)。为此,我们将 G 的每个分量除以其幅度 || G || ,其中 || G || 是平方根每个分量的平方和(距离公式)。因此,

G unit = [x G / || G || ,y G < / sub> / || G || ,z G / || G || ]

然后通过计算点积来给出 A 组件在 G 方向的大小:

A · G 单位 =(x A *(x G / || G || ))+(y A *(y G / || G || ))+(z A *(z G / || G || ))。

结果是标量(不是矢量),这就是您要查找的数量。

这是一篇很好的维基百科文章供参考:http://en.wikipedia.org/wiki/Vector_projection