2

我最近在摩托罗拉 Droid 上使用 Android SDK 和 Adob​​e AIR for Android SDK 使用 Android Accelerometer。我注意到加速度计工作得很好,但我想知道是否可以以某种方式进行补偿,这样我就不必在水平位置使用该设备。换句话说,我想使用加速度计来控制我的视觉显示,但要对其进行初始化(或以某种方式进行修改),这样我就不必将它完全放平(不得不靠在电话上没有什么乐趣)。

有谁知道我如何将设备舒适地握在手中,比如 45 度,并且仍然使用加速度计提供向前/向后的读数?这可能吗?这有什么可用的例子吗?

4

3 回答 3

1

你需要一些简单的矩阵乘法数学。通过在启动应用程序并反转它时获取当前矩阵来“校准”旋转,然后将所有后续矩阵与它相乘 - 这将为您提供与起始位置的增量。

于 2010-11-23T00:10:02.510 回答
0

我很久以前写过一个处理相对旋转的应用程序。我忘记了代码做了什么,但从我所见,它似乎 -

1)我使用 - SensorManager.getRotationMatrix(R,I,gravity.clone(),geomagnetic.clone())获得初始旋转矩阵;(重力和地磁是各自的加速和地磁矩阵。不知道为什么我使用克隆,但一定有一些原因。) 2)现在在任何阶段,获取当前旋转矩阵并将其称为 R。 3)计算初始的逆矩阵矩阵并将其称为“initialInverse”。4)将 R 与 initialInverse 相乘(或者反过来,你必须弄清楚)。5) 使用 SensorManager.getOrientation(delta, values) 获取最终方向

对不起,我完全忘记了上面的代码是做什么的。我想我记得当我写这个应用程序时,我在某处读过欧拉变换这个词,所以这就是它可能正在做的事情。不幸的是,我不能给你完整的代码,因为我可能会在市场上发布这个应用程序。但是,如果您需要更多信息,请告诉我 - 我会查看代码并回复您。

于 2010-12-01T14:51:14.737 回答
0

我正在从事一个具有类似性质的项目,其中加速度计功能不受位置限制。我的处理方式很简单,用当前读数作为默认值初始化加速度计。换句话说,你有一个按钮,一旦你把手机放在正确的位置,你按下按钮,加速度计的当前读数(G 的测量值)将是你的参考(零值),并在你高于或低于这些读数......希望这对任何人都有帮助......干杯

于 2011-02-28T20:07:53.270 回答