• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

iphone - 检测到设备移动

[复制链接]
菜鸟教程小白 发表于 2022-12-13 10:09:46 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在为 iPhone 创建运动检测警报。该警报将通过按下“激活”按钮来设置,并在一个小的倒计时后,将读取它是否正在移动。我曾尝试使用加速度计来检测运动,但如果阈值变得太低,它会不断激活,无论设备是否在移动。如果我将阈值设置得更高,它不会检测到运动,只会检测特定的运动速度。

有没有人有任何关于如何正确执行此操作的解决方案,不是通过力量,而是手机是否真的移动了。

我试图找到如何实现它的在线示例,但只提出了增强现实和 OpenGL 等的解决方案。我只需要一个简单的运动检测。

感谢您的帮助!

编辑:

我设法使用 Apple 文档中的一些示例使其正常工作。

我已经设法使用这个加速度计 didAccelerate 方法实现了我想要的:

- (void)accelerometerUIAccelerometer *)accelerometer didAccelerateUIAcceleration *)acceleration {
    // Use a basic low-pass filter to keep only the gravity component of each axis.
    accelX = (acceleration.x * kFilteringFactor) + (accelX * (1.0 - kFilteringFactor));
    accelY = (acceleration.y * kFilteringFactor) + (accelY * (1.0 - kFilteringFactor));
    accelZ = (acceleration.z * kFilteringFactor) + (accelZ * (1.0 - kFilteringFactor));

    float accelerationThreshold = 1.01; // or whatever is appropriate - play around with different values

    if (fabs(accelX) > accelerationThreshold || fabs(accelY) > accelerationThreshold || fabs(accelZ) > accelerationThreshold) {
        [self.soundPlayer play];
        accelX = accelY = accelZ = 0;
        accelerometerActive = NO;
        accelerometer.delegate = nil;
        accelerometer = nil;
    }
}



Best Answer-推荐答案


一种方法是计算重力矢量。如果手机没有移动,那么矢量将保持相当恒定。如果拿起手机,手机的方向可能会发生变化,因此重力矢量也会发生变化(相对于加速度计的方向)。

要检测运动,只需计算“激活”上设置的原始向量与当前向量之间的角度。谷歌搜索angles between 3d vectors将帮助您解决这背后的数学问题。

理论上有人可以拿起电话并保持准确的方向,但这极不可能。

希望这会有所帮助,祝你好运。

关于iphone - 检测到设备移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8508090/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap