首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测到iPhone旋转旋转吗?

检测到iPhone旋转旋转吗?
EN

Stack Overflow用户
提问于 2010-01-19 14:37:05
回答 3查看 1.6K关注 0票数 4

我想创建一个应用程序可以检测旋转的数量时,用户旋转的iPhone设备。目前,我正在使用指南针API来获取角度,并尝试许多方法来检测旋转。下面是我尝试过的解决方案列表: 1/在整个圆周上创建2个角度陷阱(整圆),以检测我们从指南针获得的角度是否超过它们。2/对指南针更新时间之间的所有角度距离求和(在updateHeading函数中)。让我们试着将和角除以360 =>,我们就可以得到自旋数

问题是:当手机旋转得太快时,指南针无法跟上手机的速度,它会返回给我们最新的角度(而不是像实际旋转中那样连续)。

我们还尝试使用加速度计来检测自旋。但是,当您在平面上旋转电话时,此方法不起作用。

如果您在这个问题上有任何解决方案或经验,请帮助我。

非常感谢。

EN

回答 3

Stack Overflow用户

发布于 2010-09-04 06:12:09

iPhone4包含一个MEMS陀螺罗盘,所以这是最直接的路线。

你已经注意到了,磁力计的反应很慢。这可以通过使用预测算法来减少,该算法使用迟滞来对当前方向真正是什么进行有根据的猜测。

首先,您需要确定传感器的实际性能。为此,您需要以几种转速中的每一种以精确的速率旋转它,并记录指南针的行为。旋转平台应该有一种读取瞬时位置的方法。

在较慢的速度下,您将看到不同程度的固定滞后。随着速度的增加,滞后会增加,直到它接近180度,这时指南针会突然翻转。在更高的速度下,您将看到的只是翻转,尽管当翻转以相同的值重复时,它可能看起来不会翻转。在其中一些较高的速度下,指南针可能看起来向后旋转,与旋转方向相反。

获得旋转工作台可能是一件麻烦的事,而且确保它不会影响局部磁场(使指南针变得无用)是一个挑战。理想的桌子将是铝制的,如果你需要使用钢制的桌子(最常见的),你将需要将手机安装在一个非磁性的平台上,以使其尽可能远离钢铁。

当地的机械车间将是一个很好的起点:数控机床可以很容易地完成所需的工作。

一旦获得罗盘性能数据,您将需要建立一个模型,将观察到的读数与实际方向和旋转速率进行比较。反转模型并将其应用于读数,以获得对实际读数的猜测。

一个简单的算法实现将是保留读数的历史,并保留顺序读数之间的差异列表。由于我们知道存在指南针滞后,当差值为非零时,我们将知道当前值由于滞后而具有一定程度的不准确性。

下一步是创建“校正”读数的列表,其中先前实际值的已知滞后用于生成更新值,该更新值用于创建被添加到“校正”列表中的最后一个值的更新值,并被存储为最新值。

当累积校正(实际列表和校正列表中的最新值之间的差异)超过360度时,这意味着我们基本上不知道指南针指向哪里。希望,这一点不会达到,因为大多数旋转运动通常应该是相当短的持续时间。

但是,由于您的目标只是计算旋转,因此在累积误差达到更高的值之前,您将偏离不到一个完整的旋转。我不确定这个值是多少,因为它取决于实际的指南针滞后和实际的旋转速率。但是,如果你只关心少量的旋转(5次左右),你应该能够获得有用的结果。

票数 3
EN

Stack Overflow用户

发布于 2010-01-22 02:09:41

你可以使用加速度的速度来确定手机的旋转速度,并用它来填充空格,直到手机停止,这时你可以再次查询指南针。

票数 0
EN

Stack Overflow用户

发布于 2010-10-06 22:18:12

如果你使用的是iPhone 4,这个问题已经解决了,你可以使用Core Motion来获取旋转数据。

对于早期的设备,我认为一个有趣的方法是尝试检测设备旋转时的抖动,以非常精细的报告间隔使用UIAccelerometer。你也许能够从与旋转平面成直角的运动中检测到一些合理的模式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2091591

复制
相关文章

相似问题

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