使用陀螺仪检测360°iOS设备旋转

使用陀螺仪检测360°iOS设备旋转,第1张

概述我希望我的应用能够在设备水平握持时检测设备旋转.我可以使用罗盘的读数,但我相信陀螺仪的偏航值会更准确.给定偏航读数,确定360°旋转(顺时针或逆时针)的最佳算法是什么.它必须是一个完整的360°,不仅仅是将手机在一个方向上旋转180°,而在相反方向上旋转180°. 假设您可以在短时间间隔内获得读数,并且偏航可以在特定起点处归零,这是一个想法.这与另一个答案不同,后者从连续适应的起点检测整圆. 在这 我希望我的应用能够在设备水平握持时检测设备旋转.我可以使用罗盘的读数,但我相信陀螺仪的偏航值会更准确.给定偏航读数,确定360°旋转(顺时针或逆时针)的最佳算法是什么.它必须是一个完整的360°,不仅仅是将手机在一个方向上旋转180°,而在相反方向上旋转180°.解决方法 假设您可以在短时间间隔内获得读数,并且偏航可以在特定起点处归零,这是一个想法.这与另一个答案不同,后者从连续适应的起点检测整圆.

在这种方法中,我们将当前偏航与之前的偏航进行比较,询问是否已经通过180度的检查点或PI.最初,检查点标志cp_pi为NO,并且以任一方向传递它以切换其状态.请注意,偏航在两个位置更改其符号,在零点处再次在PI到-PI处更改.

假设你的对象有两个在检测器的滴答之间持久的属性,BOol cp_pi;并浮动prev_yaw;,我们认为d_yaw小于PI,越过0,大于PI,越过圆圈的另一端.当越过另一端时,我们切换cp_pi.当cp_pi在穿越0时为YES时,我们保证已经过了整整一圈 – 否则,cp_pi将被切换回NO:

-(voID)tick{    float yaw = [self zeroedYaw];    if ((fabs(yaw) == PI) || (yaw == 0.0f)) return;    if (yaw * prev_yaw < 0)    {        float d_yaw = fabs(yaw - prev_yaw);        if (d_yaw > PI)        {            cp_pi = ! cp_pi;        }        else if (cp_pi)        {            // fire detection event        }    }    prev_yaw = yaw;}

请注意,为了让我们的生活更轻松,如果偏航坐在其中一个检查点上,我们将完全跳过探测器功能.

总结

以上是内存溢出为你收集整理的使用陀螺仪检测360°iOS设备旋转全部内容,希望文章能够帮你解决使用陀螺仪检测360°iOS设备旋转所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1053900.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存