我想用來自加速度計的加速度數據計算Jerk(http://en.wikipedia.org/wiki/Jerk_(physics))和顛簸(http://en.wikipedia.org/wiki/Jounce)。我想我已經搞清楚了,但我不確定自己爲顛簸而做的事是否正確。任何人都可以證實或否認什麼,我做的是給了我正確的價值觀(我需要考慮的時間?)從iPhone加速度計數據計算Jerk和Jounce
#define kFilteringFactor 0.4
float prevAccelerationX;
float prevAccelerationY;
float prevAccelerationZ;
float prevJerkX;
float prevJerkY;
float prevJerkZ;
- (void)viewDidLoad
{
[super viewDidLoad];
prevAccelerationX = 0;
prevAccelerationY = 0;
prevAccelerationZ = 0;
prevJerkX = 0;
prevJerkY = 0;
prevJerkZ = 0;
[self changeFilter:[LowpassFilter class]];
[[UIAccelerometer sharedAccelerometer] setUpdateInterval:1.0/kUpdateFrequency];
[[UIAccelerometer sharedAccelerometer] setDelegate:self];
}
// UIAccelerometerDelegate method, called when the device accelerates.
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{
float pax = prevAccelerationX;
float pay = prevAccelerationY;
float paz = prevAccelerationZ;
float pjx = prevJerkX;
float pjy = prevJerkY;
float pjz = prevJerkZ;
prevAccelerationX = acceleration.x - ((acceleration.x * kFilteringFactor) +
(prevAccelerationX * (1.0 - kFilteringFactor)));
prevAccelerationY = acceleration.y - ((acceleration.y * kFilteringFactor) +
(prevAccelerationY * (1.0 - kFilteringFactor)));
prevAccelerationZ = acceleration.z - ((acceleration.z * kFilteringFactor) +
(prevAccelerationZ * (1.0 - kFilteringFactor)));
// Compute the derivative (which represents change in acceleration).
float jerkX = ABS((prevAccelerationX - pax));
float jerkY = ABS((prevAccelerationY - pay));
float jerkZ = ABS((prevAccelerationZ - paz));
prevJerkX = jerkX - ((jerkX * kFilteringFactor) +
(prevJerkX * (1.0 - kFilteringFactor)));
prevJerkY = jerkY- ((jerkY * kFilteringFactor) +
(prevJerkY* (1.0 - kFilteringFactor)));
prevJerkZ = jerkZ - ((jerkZ * kFilteringFactor) +
(prevJerkZ * (1.0 - kFilteringFactor)));
// Compute the derivative (which represents change in acceleration).
float jounceX = ABS((prevJerkX - pjx));
float jounceY = ABS((prevJerkY - pjy));
float jounceZ = ABS((prevJerkZ - pjz));
}
您可以使用矢量爲自己節省很多工作。 – Beta