首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用CoreMotion/加速度计编程检测是否删除iPhone

使用CoreMotion/加速度计编程检测是否删除iPhone
EN

Stack Overflow用户
提问于 2013-01-21 19:36:35
回答 1查看 7.8K关注 0票数 5

因此,我正在编写一段代码,在上面的iOS 4.3中,我必须使用加速度计和陀螺仪检测不同的动作手势。

Q1:,是否有任何现有的开源代码已经实现了任何运动/手势检测?

如果不是

Q2:现在我想检测iPhone是否被丢弃。

到目前为止,我所取得的成就是:userAcceleration,(afaik)给出了 CoreMotion API,它是用户给设备的加速度,或者是设备在某个方向(x、y或z)的加速度,而不考虑重力,所以我能做的是:存储,比方说,先前的5-6个加速度参数值,可以检查它们中的任何一个是否遇到大的负值,这基本上代表了突然减速。

但是这个解决方案并不是很理想,我想我需要先检测到设备的自由落体/向下运动。知道怎么解决这个问题吗?

更新:感谢Misch分享您的方法。我根本没有想过总加速。我照你说的做了:

然而,你必须测试自己,在你的情况下,“总加速度大致相当于地球加速度”和“在一段时间内”意味着什么。

加速度值实际上是G的,所以我测试了在0.91.1范围内的“总加速度”值。在一段时间内,我检查了它们,最初,当updateInterval设置为1/20.0时,我检查了四个连续的值。就目前而言,我已经稍微放宽了神性的条件。

下面是一个示例输出:

加速度= 0.090868

加速度= 0.074473

加速度= 0.159797

加速度= 1.157513

加速度= 1.224588

加速度= 1.036272

加速度= 0.914698

加速度= 0.904093

加速度= 0.941516

加速度= 0.046362

加速度= 0.045109

加速度= 0.060045

我认为,我仍然需要继续测试和调整价值观。如果你有任何优化的想法,请分享,我知道,为了帮助你需要看到许多自由落体加速值的样本。就目前而言,我想:

  1. 将加速度的值舍入小数点3位,然后使用我正在使用的加速范围。
  2. 可以检查,在自由落体条件满足后,总加速度值是否突然下降。
  3. 你认为我所引用的加速度值有点吵吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-21 19:46:07

Q2

检查大的负值并不能告诉你手机是否被丢弃。

  • 首先,用户可以快速移动手机,这也会导致一个很大的(可能是负的)值。
  • 其次,手机可能会向另一个方向坠落,这比你想象的要好,因此,加速度可以是正的,尽管手机正在向地面移动。

您只需计算总加速度(a = sqrt(ax^2 + ay^2 + az^2)),并检查这个总加速度是否大致对应于地球加速度(9.81)。如果加速度与地球加速度对应一段时间,手机就会下降。

但是,您必须测试一下自己,在您的情况下,“总加速度对应于地球加速度”和“approximately在一段时间内的”是什么意思。

背后的物理学:

假设你以某种方式放下你的手机,手机的y轴向上显示。然后x和z加速度是0,y加速度是这样的:

加速度在开始时为0,然后达到-9.81,此时你释放你的手机。然后它会撞上地面,在小加速度峰值中看到,然后加速度又是零。

然而,你不能只使用y方向的加速度,因为你的手机可能会掉落在不同的角度。

所以你必须注意你手机的总加速度:

这里你不再看到负加速度了。然而,在这里,无论你的手机面向哪个方向,自由落体的特征总是以9.81的加速度为特征。

到您的编辑:

  1. 你为什么要把加速度的值舍入小数点3位呢?如果您测试0.9 < x < 1.1,那么x0.914698还是0.915并不重要。
  2. 如果有人掉下电话,然后又接住了它,那么总加速度就不一定会再次下降。此外,应该有一个很大的加速度值(突然减速)的时候,电话撞上地板。也许人们没有在你的值中看到这一点的原因是它太短了,它落在两个连续的测量之间。但是这是可以测量的,所以不要认为在自由落体之后,加速度会再次下降。
票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14445914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档