Rotation angles from Quaternion

I have a 3D scene in which in the imaginary sphere I position few objects, now I want to rotate them within device motion.

I use spherical coordinate system and calculate position in sphere like below:

x   = ρ * sin⁡ϕ * cos⁡θ
y   = ρ * sin⁡ϕ * sin⁡θ
z   = ρ * cos⁡ϕ. 

Also, I use angles (from 0 to 2_M_PI) for performing rotation horizontally (in zx)

在这里输入图像描述

As result all works perfect until I want to use Quaternion from motion matrix.

I can extract values like pitch, yaw, roll

    GLKQuaternion quat = GLKQuaternionMakeWithMatrix4(motionMatrix);
    CGFloat adjRoll = atan2(2 * (quat.y * quat.w - quat.x * quat.z), 1 - 2 * quat.y * quat.y - 2 * quat.z * quat.z);
    CGFloat adjPitch = atan2(2 * (quat.x * quat.w + quat.y * quat.z), 1 - 2 * quat.x * quat.x - 2 * quat.z * quat.z);
    CGFloat adjYaw = asin(2 * quat.x * quat.y + 2 * quat.w * quat.z);

or try also

    CMAttitude *currentAttitude = [MotionDataProvider sharedProvider].attitude; //from CoreMotion
    CGFloat roll = currentAttitude.roll; 
    CGFloat pitch = currentAttitude.pitch;
    CGFloat yaw = currentAttitude.yaw; 

*the values that i got is different for this methods

The problem is that pitch, yaw, roll is not applicable in this format to my scheme.

How can I convert pitch, yaw, roll or quaternion or motionMatrix to required angles in xz for my rotation model? Am I on correct way of things doing, or I missed some milestone point?

How to get rotation around y axis from received rotation matrix/quaternion from CoreMotion, converting current z and x to 0, so displayed object can be rotated only around y axis?

I use iOS, by the way, but guess this is not important here.

链接地址: http://www.djcxy.com/p/81786.html

上一篇: 四元数和变换矩阵

下一篇: 旋转角度来自Quaternion