检测设备旋转时的移动

12

我正在寻找一种方法来检测手机的运动,而不考虑用户如何拿着手机。

以下是一些示例:

  • 我对垂直运动(例如用户向上拉手机)感兴趣,无论手机放在桌子上还是手里拿着(可能颠倒)都能识别。
  • 我也对水平运动(例如用户将手机从身体推开)感兴趣,还可以忽略用户如何持有手机。

背景是我想要识别用户是否将手机从口袋中取出(比如向上拉30-40厘米并且还有一些水平移动)。

我想这需要结合用户加速度和朝向来完成。但是我没有找到正确的数学方法。


你想检测晃动运动吗? - Vidhi
1
不,我想检测“空间”中的移动,比如将手机向上或向前移动几厘米,而不管用户如何握住手机。 - Thorsten
我认为我必须从userAcceleration和attitude中获得一个组合。但是我没有找到正确的数学方法...您能澄清这个声明吗?(即展示一下您已经尝试过什么) - William GP
2个回答

1

我不确定你所说的“正确的数学”是什么意思。但我会读取加速度计并对所有三个方向(x / y / z)的绝对值进行求和。这将为您提供一个单一的加速度数字,独立于手机的方向或运动的方向。

更好的方法是计算RMS加速度,即将x / y / z加速度的平方相加并计算总和的平方根。

这种方法的明显缺点是它无法提供有关运动方向的信息。您可以添加一些阈值或过滤器以区分单一的线性运动与摇晃(例如通过测量两个加速事件之间的时间)。

此外,您还可以确定海拔高度的变化(这与手机的方向无关),尽管我怀疑30到40厘米的差异是否可以被精确地测量。


0

如果您的应用程序在前台,您可能可以这样做。您可以使用UIDeviceOrientationLandscapeLeftUIDeviceOrientationLandscapeRight以及UIDeviceOrientationPortraitUpsideDown/UIDeviceOrientationPortrait来检测手机认为它处于哪个方向,并从那里调整如何计算移动。

当手机被拿起时,它可能会发生变化。通过加速度计,这种变化可能能够给您一个关于手机如何移动的图片。不过,这需要大量的测试。我建议您设置练习应用程序并获取大量有关屏幕方向更改以及每次更改时加速度计行为的数据,并寻找趋势。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接