簡體   English   中英

如何處理加速度,因為它不應該與顯示刷新率掛鈎?

[英]How to handle acceleration as it should not tied to display refresh rate?

如果我們使用CADisplayLink設置60fps,30fps或15fps的計時器,並且使用加速度計的

acceleration.x

要處理加速度,則60fps將產生30fps兩倍的加速度,因為現在對象的x位置更新頻率是兩倍。 如何正確處理現實加速? (可能是模擬真實的重力拉力)。


更新:我認為我犯了一個錯誤:它不是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)的新速度,即加速度乘以時間(加速度是加速度計的讀數,時間是時間間隔)在讀數之間)。

例如:

您的對象從無運動開始,加速度計應顯示為0(除非您使用裸加速度計而不是運動管理器,否則您將看到重力)。 現在,您可以使其快速向右移動,並且該設備將讀取5個讀數,每個讀數的差異為.2秒。

因此您可以說1 2 1 -1 -2 ...這是因為起初它加速但當它開始減速時卻在減速,但還是考慮一下第一個讀數,此時的速度為0 * 1 * .2,現在的時間是.2 + 2 * .2等。理想情況下,由於運動定律,從開始運動到完成運動的所有速度之和應為0。

現在,如果您碰巧想要獲得位移,那么要准確地獲得THAT會非常復雜,因為為此您必須再次積分,並且雙重積分就錯誤而言是瘋狂的。

有幾種獲取位移的方法,實際上,我在堆棧溢出中還記得幾篇文章,討論了如何使用設備加速度計來獲得它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM