2013-05-06 43 views
0

我不確定這是不是一個愚蠢的問題,所以請在這裏忍受我。無論如何,我有兩個UIAccelerationValue's。當我單獨NSLog他們的結果我分別得到價值是這樣的:將兩個UIAccelerationValue加在一起?

1. Value: -0.016186 

2. Value2: -0.033460 

然而,當我加上或減去兩個UIAccelerationValue's在一起,我得到的值是這樣的:

Value: -571.142049 
Value: -1085.174017 
Value: -2061.834754 
Value: -3917.490156 
Value: -7443.235420 
Value: -14142.151420 

正如你所看到的值只是繼續呈指數增長。

無論如何,我怎麼能只是簡單地加上或減去兩個UIAccelerationValues沒有我現在得到的結果?

+0

UIAccelerationValue只是一個double ...'typedef double UIAccelerationValue;'你能詳細說明你的問題嗎? – 2013-05-13 13:32:02

+0

如果你能夠發佈一些有問題的代碼,你會得到更好的答案。正如人們所提到的,UIAccelerationValue是雙倍的。您是從連續的讀數中添加UIAcceration.X | Y | Z還是隻讀取UIAcceleration並將兩個座標軸相加或相減?第一個是有道理的,因爲文件提到傳感器是嘈雜的,最好的讀數是通過使用平均或運行平均值獲得的。 – 2013-05-18 13:31:44

回答

3

我想你是存儲加法/減法的結果,並加/減了一遍又一遍,因此增加,大的值

UIAccelerationValue僅僅是一個雙(見UIAccelerometer.h):

typedef double UIAccelerationValue; 

用下面的例子中,你得到預期輸出:

UIAccelerationValue xOne = -0.016186; 
UIAccelerationValue xTwo = -0.033460; 

NSLog(@"%f", xOne + xTwo); // prints out -0.049646 
NSLog(@"%f", xOne - xTwo); // prints out 0.017274 
+0

NSLog(@「%f」,xOne ** - ** xTwo); //打印出0.017274 – 2013-05-16 09:25:19

+0

更正了錯字 – Marcel 2013-05-16 09:26:43

0

我不是UIAcceleration專家,但這裏是從SAMPL爲例e代碼。希望能幫助到你。

#define kAccelerometerFrequency  50.0 //Hz 
#define kFilteringFactor 0.1 


UIAccelerationValue gravX; 
UIAccelerationValue gravY; 
UIAccelerationValue gravZ; 
gravX = (acceleration.x * kFilteringFactor) + (gravX * (1.0 - kFilteringFactor)); 
gravY = (acceleration.y * kFilteringFactor) + (gravY * (1.0 - kFilteringFactor)); 
gravZ = (acceleration.z * kFilteringFactor) + (gravZ * (1.0 - kFilteringFactor)); 

UIAccelerationValue accelX = acceleration.x - ((acceleration.x * kFilteringFactor) + (gravX * (1.0 - kFilteringFactor))); 

UIAccelerationValue accelY = acceleration.y - ((acceleration.y * kFilteringFactor) + (gravY * (1.0 - kFilteringFactor))); 
UIAccelerationValue accelZ = acceleration.z - ((acceleration.z * kFilteringFactor) + (gravZ * (1.0 - kFilteringFactor))); 
accelX *= 9.81f; 
accelY *= 9.81f; 
accelZ *= 9.81f; 
accelX = [self tendToZero:accelX]; 
accelY = [self tendToZero:accelY]; 
accelZ = [self tendToZero:accelZ]; 

UIAccelerationValue vector = sqrt(pow(accelX,2)+pow(accelY,2)+pow(accelZ, 2)); 
UIAccelerationValue acce = vector - prevVelocity; 
UIAccelerationValue velocity = (((acce - prevAcce)/2) * (1/kAccelerometerFrequency)) + prevVelocity; 

NSLog(@"X %g Y %g Z %g, Vector %g, Velocity %g",accelX,accelY,accelZ,vector,velocity);