在尝试获得欧拉角时,CMQuaternion问题

时间:2015-05-22 07:31:03

标签: ios objective-c rotation core-motion

在我的应用程序中,我想使用iPhone旋转三维旋转3D模型。所以我现在的方法是这样的:

- (void)deviceMotionDataReceived:(CMDeviceMotion *)motion {

    CMQuaternion quat = motion.attitude.quaternion;

    NSLog(@"x:%f y:%f z:%f w%f", quat.x, quat.y, quat.z, quat.w);

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

     NSLog(@"pitch:%f roll:%f yaw:%f", myPitch, myRoll, myYaw);

}

一切看起来都很好 - 俯仰,滚动接受旋转360度,但当我改变偏航时 - 当偏航为~90 / -90度时,俯仰/滚转旋转180度。如何在所有偏航范围内获得正确的俯仰/滚转角度? Thx提前!

0 个答案:

没有答案