我正在使用Android上的计步器。为了改善它,我很想从所有其他力量中抽出垂直力。
文档表明,由于不准确,不应再使用方向传感器,因此我正在寻找其他方法。
我的想法是:使用'TYPE_GRAVITY'传感器确定实际垂直轴是什么(从地球的核心到天空),然后使用该信息旋转TYPE_LINEAR_ACCELERATION数据,然后仅使用想要的轴。
我在想,这可能吗?或者是否无法计算单个[x,y,z]重力矢量所需的旋转?
答案 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