2013-05-06 42 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);