我正在开发 Android 上的计步器。为了改进它,我很想从所有其他力中提取垂直力。
文档表明,由于不准确,不应再使用方向传感器,所以我正在寻找其他东西。
我的想法是:使用“TYPE_GRAVITY”传感器确定真正的垂直轴是什么(从地心到天空),然后使用该信息旋转 TYPE_LINEAR_ACCELERATION 数据,然后只使用想要的轴。
我想知道,这可能吗?还是不可能从单个 [x,y,z] 重力矢量计算所需的旋转?
我正在开发 Android 上的计步器。为了改进它,我很想从所有其他力中提取垂直力。
文档表明,由于不准确,不应再使用方向传感器,所以我正在寻找其他东西。
我的想法是:使用“TYPE_GRAVITY”传感器确定真正的垂直轴是什么(从地心到天空),然后使用该信息旋转 TYPE_LINEAR_ACCELERATION 数据,然后只使用想要的轴。
我想知道,这可能吗?还是不可能从单个 [x,y,z] 重力矢量计算所需的旋转?
我将尝试从物理学的角度而不是 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单位(看看我在那里做了什么?)。为此,我们将G的每个分量除以其大小||G|| , 其中||G|| 是每个分量的平方和的平方根(距离公式)。因此,
G单位= [x G / ||G|| , y G / ||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