如何使用四元数来描述大于360度的旋转角度?

M.Z*_*hao 5 c++ math graphics

我正在尝试使用四元数来进行旋转动画.我的算法创建了Quaternions,并且每帧都有slerps.这是我的代码,用于通过轴和旋转角度构造四元数.

template <typename U>
Quaternion(Vector3<U> vec, const float& angle)
{
    vec.normalize();
    float cosa = cos(angle/2);
    float sina = sin(angle/2);
    w = cosa;
    x = sina * vec.x;
    y = sina * vec.y;
    z = sina * vec.z;
}
Run Code Online (Sandbox Code Playgroud)

然后我发现当我试图旋转4π弧度时,动画不起作用,因为我创建的四元数相当于0度.我想知道四元数是否可以表示360度以上的旋转?或者我的动画算法是否需要改进?

gez*_*eza 5

我想知道四元数是否可以表示360度以上的旋转?

不,它不能.

范围[360; 720]之间的四元数将被视为另一个方向的旋转:[ - 360; 0].

和范围之间的四元数[720*k; 720*(k + 1)]将被视为旋转[0; 720].

如果您使用slerp进行此类动画,则四元数对它们不利.

四元数只能在小于360的角度之间进行捕捉.

如果您仍想这样做,请使用不同的表示,如轴角.