使用重力确定世界参考系?

Posted

技术标签:

【中文标题】使用重力确定世界参考系?【英文标题】:Using gravity to determine world reference frame? 【发布时间】:2013-10-07 20:48:18 【问题描述】:

我正在开发 android 上的计步器。为了改进它,我很想从所有其他力中提取垂直力。

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

我的想法是:使用“TYPE_GRAVITY”传感器确定真正的垂直轴是什么(从地心到天空),然后使用该信息旋转 TYPE_LINEAR_ACCELERATION 数据,然后只使用想要的轴。

我想知道,这可能吗?还是无法从单个 [x,y,z] 重力矢量计算所需的旋转?

【问题讨论】:

【参考方案1】:

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

假设TYPE_GRAVITY 传感器返回一个向量G = [xG, yG, zG子>]。

TYPE_LINEAR_ACCELERATION 传感器返回另一个向量 A = [xA, yA, zA ]。

您要查找的是 AG 方向上的单位向量上的投影幅度。换句话说,有多少AG方向?

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

G单位 = [xG / ||G||, yG / ||G||, zG / ||G||]

A的分量在G方向的大小然后通过计算点积得到:

A · Gunit = (xA * (xG / ||G||)) + (yA * (yG / ||G|| )) + (zA * (zG / ||G||))。

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

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

【讨论】:

哇,惊人的答案......!现在已经很晚了,我需要好好研究它才能真正理解它,但是哇!去试试,会报告的! 哇,真是太棒了。效果很好!我用完整的加速度计数据对其进行了测试,在以各种可能的方式旋转设备的同时,Z 轴的重力输出保持在 1G。它看起来更复杂,因为我已经在我的代码中使用了||G||。它确实是magnitude。我会尝试为这个问题添加一个赏金来奖励你,因为这个答案真的很出色。 我想有一个与重力数据相关的预先计算的幅度是有道理的。我很高兴能帮上忙!我的背景是物理,而且我对 Android 编程还是很陌生,所以我喜欢我的物理背景以意想不到的方式帮助我!我想我现在可能会更深入地研究这个传感器的东西。 好的,很好。不,幅度不是预先计算的,但我之前为了其他目的计算过,所以我明白你在说什么。 :)

以上是关于使用重力确定世界参考系?的主要内容,如果未能解决你的问题,请参考以下文章

swift spritekit 随着游戏时间的推移增加重力?

如何根据重力加速度编码一个运动圈?

在中国地图上确定南京和拉萨得经纬度,在世界地图上确定美国休斯敦得经纬度,比较三者谁的经纬度相近?讲

无论手机方向如何,都获得垂直于重力方向的加速度。

请用世界地图确定下列经纬度是啥城市 北纬36度 东经140度; 北纬38度 东经128度; 北纬

您如何确定现实世界中推荐的 ADO.NET 批量大小?