2011-12-10 14 views
0

質問自体は簡単です。 CMDeviceMotionモーションを使用する場合、CMAttitudeというタイプのattitudeというオブジェクトにロールとピッチが含まれています。ロールとピッチは、Y軸とX軸の周りのオブジェクトの回転を表します。 iPhoneがテーブルの上に置かれているときにロールとピッチが両方とも0になります。iPhoneをY軸またはX軸の周りで回転させると、これらの値が更新されます。CMAttitudeロールとピッチ計算

これらの値がどのように計算されているか知りたいと思います。デバイスの現在の重力ベクトルからロールとピッチを計算する方法があります。ピッチはピッチ= -asin(motion.gravity.y)と思われますが、ロールの計算方法はわかりません。あなたがにいるどの向きに応じて符号を変え、そしてz = 0の漸近線の周りに注意する必要がありますけれども

roll = -atan(x/z); 

:それは何か可能性がありますあなたの助け

答えて

0

ため

感謝。

実際にコアモーションは、加速度計の測定値に加えてジャイロ測定値を使用して、より正確に姿勢を計算すると信じています(gimbal lockも対応しています)。

0
pitch = atan2(motion.gravity.z, motion.gravity.y) 
roll = atan2(motion.gravity.z, motion.gravity.x) 

このようにピッチの値は、それが完全を期すために0 + PIおよびロール

1
CMQuaternion quat = self.motionManager.deviceMotion.attitude.quaternion; 
myRoll = radiansToDegrees(atan2(2*(quat.y*quat.w - quat.x*quat.z), 1 - 2*quat.y*quat.y - 2*quat.z*quat.z)) ; 
myPitch = radiansToDegrees(atan2(2*(quat.x*quat.w + quat.y*quat.z), 1 - 2*quat.x*quat.x - 2*quat.z*quat.z)); // PITCH !!! 
myYaw = radiansToDegrees(asin(2*quat.x*quat.y + 2*quat.w*quat.z)); 
+0

等0 -piの間であろう。 radiansToDegrees(フロートラジアン){ リターン((ラジアン)*(180.0/M_PI)); } –

関連する問題