gpt4 book ai didi

iphone - 如何处理加速,因为它不应该与显示刷新率 Hook ?

转载 作者:行者123 更新时间:2023-11-28 17:34:08 25 4
gpt4 key购买 nike

如果我们使用 CADisplayLink 设置一个定时器,无论是 60fps、30fps 还是 15fps,我们都使用加速度计的

acceleration.x

为了处理加速度,60fps 将产生两倍于 30fps 的加速度,因为现在对象的 x 位置更新频率是 30fps 的两倍。如何正确处理现实加速? (可能是为了模拟真实的重力拉力)。


更新:我想我犯了一个错误:它不是 CADisplayLink 的 fps,而是加速度计事件处理程序的频率。如果我将它设置为 1/60.0 或 1/30.0,或 1/15.0,对象加速较慢......由于事件处理程序执行了

objVelocity.x += acceleration.x;

我认为频率应该自动调整以使速度增加更慢,但事实并非如此?

最佳答案

这个概念是错误的。即使您可以将其设置为 100 fps,加速度也将完全相同。它不会改变,因为加速度是恒定的,直到运动管理器改变它,并且根据您在其中设置的更新频率发生。即使它改变了,你也不能只是“添加”它,因为那不是加速的工作方式。该设备会在您阅读它的任何时刻为您提供加速度(包括重力,除非您使用设备运动)。

如果你想获得速度,你有时间因素来补偿 fps 的差异。如果你想要位置,那么事情会变得更加复杂,因为二重积分会产生噪音,而且你必须考虑到读数可能不会像你预期的那样快速变化。根据我的实验,你可以安全地将它设置为每秒 70 次左右,但它确实会随着你使用的设备而改变(4s 或 4 左右)

所以供引用:

加速度计为您提供加速度,这始终是一个读数,取决于设备在任何给定时间的加速度。

如果你对加速度进行积分,你会得到速度,这似乎是你想要得到的,等式如下:

v = u + a * t

现在仔细看看如何让你的总速度加到初始速度(你以前的速度 u)上,新速度是加速度乘以时间(加速度是加速度计的读数,时间是读数之间的时间间隔)。

例如:

你的对象从没有运动开始,acceleratin 应该读取 0(除非你使用的是裸加速计而不是运动管理器,在这种情况下你会看到重力)。现在你让它快速向右移动,设备会读取 5 个读数,每个读数有 0.2 秒的差异。

所以你可以说 1 2 1 -1 -2 ... 那是因为起初它加速但当它开始减速时它正在减速但是仍然,只考虑第一个读数,你当时的速度是 0 * 1*.2,现在时间 to 是 .2 + 2 * .2 等等。理想情况下,根据运动定律,从开始移动到完成移动的所有速度总和应为 0。

现在,如果您碰巧想要获得位移,要获得准确的结果非常复杂,因为您必须再次积分,而双重积分在错误方面是疯狂的。

有几种方法可以获取位移,事实上我记得堆栈溢出中的几篇文章讨论了如何使用设备加速度计获取位移。

关于iphone - 如何处理加速,因为它不应该与显示刷新率 Hook ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10344151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com