旋转角度来自Quaternion

我有一个3D场景,其中在想象的球体中我定位了几个物体,现在我想在装置运动中旋转它们。

我使用球坐标系并计算如下球体的位置:

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

另外,我使用角度(从0到2_M_PI)水平旋转(以zx为单位)

在这里输入图像描述

因此,除非我想使用运动矩阵中的四元数,否则所有工作都是完美的。

我可以提取像俯仰,偏航,滚动的值

    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);

或者尝试一下

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

*我得到的价值是不同的这种方法

问题是音高,偏航,滚动不适用于我的方案的这种格式。

如何将我的旋转模型中的俯仰,偏航,滚动或四元数或motionMatrix转换为xz中所需的角度? 我在正确的方式做事,或者我错过了一些里程碑点?

如何从CoreMotion接收到的旋转矩阵/四元数绕y轴旋转,将当前的z和x转换为0,因此显示的对象只能围绕y轴旋转?

顺便说一句,我使用iOS,但是这里并不重要。

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

上一篇: Rotation angles from Quaternion

下一篇: Rotation matrix to quaternion equivalence