2015-03-04 1 views
0

мне нужно, чтобы получить вращение для чтения компакт-дисков на портретном режиме, вокруг Y оси акселерометра, согласно показано на этом изображении, (ссылка: https://developer.apple.com/library/ios/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/motion_event_basics/motion_event_basics.html) enter image description hereвращения на оси Y в степени или радианах в прошивкой

Как может я получить поворот, выполняемый вокруг оси Y, либо положительным, либо отрицательным. Я реализовал несколько кодов из кода stackoverflow/Apple, я не вижу разницы в рулоне, шаге и рыскании, когда я вращаюсь по оси Y.

[self.motionManager setGyroUpdateInterval:0.1f]; 
[self.motionManager startGyroUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMGyroData *gyroData, NSError *error) { 
    dispatch_async(dispatch_get_main_queue(), ^{ 
      NSString *strYaw = [NSString stringWithFormat:@"Yaw: %.02f",gyroData.rotationRate.z]; 
      [self.lblYaw setText:strYaw]; 

      NSString *strPitch = [NSString stringWithFormat:@"Pitch: %.02f",gyroData.rotationRate.x]; 
      [self.lblPitch setText:strPitch]; 

      NSString *strRoll = [NSString stringWithFormat:@"Roll: %.02f",gyroData.rotationRate.y]; 
      [self.lblRoll setText:strRoll]; 

     }); 

}]; 

И это,

roll = atan2(2*y*w - 2*x*z, 1 - 2*y*y - 2*z*z); 
pitch = atan2(2*x*w - 2*y*z, 1 - 2*x*x - 2*z*z); 
yaw = asin(2*x*y + 2*z*w); 

myRoll = (atan2(2*(quat.y*quat.w - quat.x*quat.z), 1 - 2*quat.y*quat.y - 2*quat.z*quat.z)); 
myPitch = (atan2(2*(quat.x*quat.w + quat.y*quat.z), 1 - 2*quat.x*quat.x - 2*quat.z*quat.z)); 
myYaw = (asin(2*quat.x*quat.y + 2*quat.w*quat.z)); 

Любая помощь будет оценена.

ответ

0

Я нашел вращение устройства с помощью компаса, созданного locationManager

/** 
* Location manager class instance 
*/ 
@property (strong, nonatomic) CLLocationManager *locationManager; 

Затем инициализации

- (void) initLocationManager 
{ 
    self.locationManager = [[CLLocationManager alloc] init]; 
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
    self.locationManager.headingFilter = 0.1; 
    self.locationManager.delegate = self; 
    [self.locationManager startUpdatingHeading]; 
} 

и реализации метода делегата

- (void) locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading 
{ 
    // newHeading.trueHeading is the property that i needed. 
} 
0

Удачи, играя с ним.

+0

rotationrate, согласно моему знанию скорость вращения устройства поворачивается, он снова становится 0, когда устройство устойчиво, независимо от того, ntation. –

+0

https://developer.apple.com/library/prerelease/ios/documentation/CoreMotion/Reference/CMGyroData_Class/index.html Скорость вращения оси Y в радианах в секунду. Знак следует правилу правой руки: если правая рука обернута вокруг оси Y, так что наконечник большого пальца указывает на положительный Y, положительное вращение - одно к кончикам других четырех пальцев. – LoVo

+0

Что мне нужно - это угол, на котором удерживается устройство. Не скорость, с которой устройство вращалось, потому что оно становится 0, когда устройство становится устойчивым, поэтому не может вычислить угол из него. Правильно? –

Смежные вопросы