2012-09-12 4 views
0

다음 코드를 사용하여 장치가 한 곳에서 다른 곳으로 이동할 때의 거리를 계산했습니다. 올바른지 또는 제 코드를 살펴보십시오.UIAccelerometer 거리 계산

-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration 
{ 
    NSDate *now = [NSDate date]; 
    NSTimeInterval intervalDate = [now timeIntervalSinceDate:now_prev]; 

    sx = acceleration.x * kFilteringFactor + sx * (1.0 - kFilteringFactor); 
    sy = acceleration.y * kFilteringFactor + sy * (1.0 - kFilteringFactor); 
    sz = acceleration.z * kFilteringFactor + sz * (1.0 - kFilteringFactor); 

    [xLabel setText:[NSString stringWithFormat:@"%.2f",sx]]; 
    [yLabel setText:[NSString stringWithFormat:@"%.2f",sy]]; 
    [zLabel setText:[NSString stringWithFormat:@"%.2f",sz]]; 

    float aValue = sqrtf(sx*sx+sy*sy+sz*sz); 
    [gLabel setText:[NSString stringWithFormat:@"%.2f g",aValue]]; 

    velX += (sx * intervalDate); 
    distX += (velX * intervalDate); 

    velY += (sy * intervalDate); 
    distY += (velY * intervalDate); 

    velZ += (sz * intervalDate); 
    distZ += (velZ * intervalDate); 

    float distance = sqrtf(distX*distX+distY*distY+distZ*distZ); 
    [distanceLabel setText:[NSString stringWithFormat:@"%.2f",distance*0.0006213f]]; 

    now_prev = [now retain]; 

} 
+0

당신은 어느쪽으로 든 문제가 생길 것입니다. 이런 종류의 'dead reconing'은 끔찍하게 부정확합니다. 전화의 감속도 다루지는 않습니다. –

+0

나는 너를 못 잡았어. UIAccelerationValues에서 거리를 계산해 보라고 할 수 있니? – SRI

+1

왜 사람들이 질문에 downvote 모르겠어요. 어떤 일이 잘못되면 내 질문에 대답? Downvote는 괜찮아요, 또한 올바른 일이 잘못되었습니다. – SRI

답변

0

액셀러레이터 데이터로부터 거리를 얻는 것이 매우 비효율적 인 이유는 많이 있습니다. 초기 위치를 추적하려면 모든 가속 값을 벡터에 연속적으로 통합해야하며, 매우 높은 샘플링 속도로 계산하는 것이 좋습니다 (계산시 큰 차이로 인해 부정확하게 이어질 수 있음)

메소드 자체가 isn 끔찍하게 알아 내기가 어렵다. This question explains how to do the maths and pseudocode for such an integration approach

+0

내 의견에 대한 부정확 한 제쳐두고, 이것은 o.k 될 것입니다. "흔들기 제스처"인식을위한 출발점. –