2016-09-29 2 views
0

J'essaie de trouver un angle précis (a) montrer dans l'image ci-dessous.Comment calculer et obtenir la valeur lisse pour la hauteur?

enter image description here

En faisant des recherches, je comprends que je peux obtenir l'angle à l'aide CMotionManger. J'ai créé une classe singleton qui me donnera des mises à jour concernant le mouvement de l'appareil. Et obtenir le « Pas » valeur à l'aide CMQuaternion

Pour mieux comprendre ce que « Pitch » est par rapport à l'axe, reportez-vous ci-dessous l'image.

enter image description here

Voici mon code dans lequel je reçois la valeur attendue de pitch.is manière correcte de trouver l'angle indiqué en 1ère image?

- (void) startMotionUpdate { 

if (self.motionManager == nil) { 
    self.motionManager = [[CMMotionManager alloc] init]; 
} 

self.motionManager.deviceMotionUpdateInterval = kUpdateInterval; 

[self.motionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXArbitraryZVertical 
                 toQueue:self.deviceQueue 
                withHandler:^(CMDeviceMotion *motion, NSError *error) 
{ 
    [[NSOperationQueue mainQueue] addOperationWithBlock:^{ 
     CGFloat x = motion.gravity.x; 
     CGFloat y = motion.gravity.y; 
     CGFloat z = motion.gravity.z; 


     CMQuaternion quat = self.motionManager.deviceMotion.attitude.quaternion; 
     double yaw = asin(2*(quat.x*quat.z - quat.w*quat.y)); 

     DLog(@"Yaw ==> %f", yaw); 

     double myPitch = radiansToDegrees(atan2(2*(quat.x*quat.w + quat.y*quat.z), 1 - 2*quat.x*quat.x - 2*quat.z*quat.z)); 

     DLog(@"myPitch ==> %.2f degree", myPitch); 

     self.motionLastPitch = myPitch; 
    }]; 
}]; 

} 

Connexion Je reçois cette impression:

[Line 64] myPitch ==> 74.71 degree 
[Line 60] Yaw ==> -0.037314 
[Line 64] myPitch ==> 74.68 degree 
[Line 60] Yaw ==> -0.037849 
[Line 64] myPitch ==> 74.67 degree 
[Line 60] Yaw ==> -0.038531 
[Line 64] myPitch ==> 74.69 degree 
[Line 60] Yaw ==> -0.038637 
[Line 64] myPitch ==> 74.71 degree 
[Line 60] Yaw ==> -0.037314 
[Line 64] myPitch ==> 74.68 degree 
[Line 60] Yaw ==> -0.037849 
[Line 64] myPitch ==> 75.65 degree 
[Line 60] Yaw ==> -0.038531 
[Line 64] myPitch ==> 76.90 degree 
[Line 60] Yaw ==> -0.038637 

J'ai essayé de placer mon téléphone selon la première image, donc est les valeurs sont justes? Si oui, comment puis-je obtenir les valeurs stables pour Pitch?

Toute aide/Idea/assistance vous sera utile.

Répondre