簡體   English   中英

在iOS中尋找速度和加速度

[英]Finding speed and acceleration in iOS

請在使用iPhone Accelerometer查找加速度和速度(速度)的過程中建議我。

使用下面的代碼來測量加速度和速度。 但是沒有獲得正確的速度值。

CMMotionManager *motionManager;
motionManager = [[CMMotionManager alloc] init];
motionManager.accelerometerUpdateInterval  = 1.0/10.0;
[motionManager startDeviceMotionUpdates];
CMMotionManager *mManager = [[CMMotionManager alloc] init];


    [mManager setAccelerometerUpdateInterval:0.1];// Update at 10Hz
    [mManager startAccelerometerUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {

        motionManager = mManager;

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

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

        UIAccelerationValue accelY = accelerometerData.acceleration.y - ( (accelerometerData.acceleration.y * kFilteringFactor) + (gravY * (1.0 - kFilteringFactor)) );
        UIAccelerationValue accelZ = accelerometerData.acceleration.z - ( (accelerometerData.acceleration.z * kFilteringFactor) + (gravZ * (1.0 - kFilteringFactor)) );

        accelX *= 9.81f;
        accelY *= 9.81f;
        accelZ *= 9.81f;


        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(@"Prev Velocity: %f",prevVelocity);
        NSLog(@"Velocity :%f",velocity);

        prevAcce = acce;
        prevVelocity = velocity;


        self.accelerationLbl.text = [NSString stringWithFormat:@"%.2f",vector];
        self.velocityLbl.text = [NSString stringWithFormat:@"%.2f",velocity];



    }];

試試這個代碼:

在您的ViewDidLoad方法中

[self setAccelerometerEnabled:NO];
[[UIAccelerometer sharedAccelerometer] setUpdateInterval:1/60]; // this is for your Accelerometer speed

Accelerometer代表方法:

- (void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{    
   CGPoint playerPos = [imageview position];
   playerPos.x += kXFilterFactor * acceleration.y;
   playerPos.y += kYFilterFactor * -acceleration.x;

   if (playerPos.x < 10)
   {
      playerPos.x = 10;
   } else if (playerPos.x > self.view.frame.size.width - 10)
   {
      playerPos.x = self.view.frame.size.width - 10;
   }

   if (playerPos.y< 10)
   {
      playerPos.y = 10;
   } else if (playerPos.y > self.view.frame.size.height - 10)
   {
      playerPos.y = self.view.frame.size.height - 10;
   }
   [imageview setPosition:playerPos];
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM