2016-09-29 10 views
0

私は下の画像に正確な角度(a)を見出そうとしています。私はCMotionMangerを使用して角度を得ることができることを理解し、研究することでピッチのスムーズな値を計算して取得する方法は?

enter image description here

。私はデバイスの動きに関する最新情報を提供するシングルトンクラスを作成しました。そして、より良く理解するためにCMQuaternion

を使用して「ピッチ」の値を取得することはどのような「ピッチ」とは、画像の下に参照してください、軸に対してです。ここで

enter image description here

は、ここで私はpitch.isそれ第一の画像に示す角度を見つけるための正しい方法の期待値を取得しています私のコードですか?ログイン

- (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; 
    }]; 
}]; 

} 

私はこのプリントを取得しています:

[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 

私は最初の画像ごとに自分の携帯電話を配置しようとしたので、値が正しいのですか?はいの場合は、どのようにしてピッチの安定した値を取得できますか?

ヘルプ/アイデア/ガイダンスが参考になります。

答えて

関連する問題