好的我發現了一些似乎可行的東西,但我仍然有一些問題。 這裏是我如何繼續(承認設備垂直):
1 - 我有我的默認x,y和z值。
2-我使用低通濾波器從這些數據中提取重力矢量。
3 - 我從每個x,y和z減去標準化的重力矢量,並獲得運動加速度。
4 - 然後,我將這個加速度值與時間相結合,所以我得到速度。
5 - 我再次將這個速度與時間相結合,並找到一個位置。
以下所有代碼都加入到我的控制器的加速度計:didAccelerate:delegate中。 我想根據我找到的位置來移動球。 這裏是我的代碼:
NSTimeInterval interval = 0;
NSDate *now = [NSDate date];
if (previousDate != nil)
{
interval = [now timeIntervalSinceDate:previousDate];
}
previousDate = now;
//Isolating gravity vector
gravity.x = currentAcceleration.x * kFileringFactor + gravity.x * (1.0 - kFileringFactor);
gravity.y = currentAcceleration.y * kFileringFactor + gravity.y * (1.0 - kFileringFactor);
gravity.z = currentAcceleration.z * kFileringFactor + gravity.z * (1.0 - kFileringFactor);
float gravityNorm = sqrt(gravity.x * gravity.x + gravity.y * gravity.y + gravity.z * gravity.z);
//Removing gravity vector from initial acceleration
filteredAcceleration.x = acceleration.x - gravity.x/gravityNorm;
filteredAcceleration.y = acceleration.y - gravity.y/gravityNorm;
filteredAcceleration.z = acceleration.z - gravity.z/gravityNorm;
//Calculating velocity related to time interval
velocity.x = velocity.x + filteredAcceleration.x * interval;
velocity.y = velocity.y + filteredAcceleration.y * interval;
velocity.z = velocity.z + filteredAcceleration.z * interval;
//Finding position
position.x = position.x + velocity.x * interval * 160;
position.y = position.y + velocity.y * interval * 230;
如果我執行此,我得到相當不錯的價值,我的意思是,我可以看到加速進入正值或負值,根據我做動作。 但是,當我嘗試將這個位置應用於我的球視圖時,我可以看到它正在移動,但是具有向另一個方向移動更多的傾向。這意味着,例如,如果我用我的設備畫圓圈,我會看到描述曲線的球在屏幕的左上角。 類似的東西:http://img685.imageshack.us/i/capturedcran20100422133.png/
你對發生了什麼有什麼想法嗎? 在此先感謝!
好的,我正在研究這個。謝謝 ! – 2010-04-20 12:13:53
您需要整合*兩次*才能從加速到位移。 – 2010-04-20 12:19:39