我正在尝试使用四元数来做旋转动画。
我的算法会创建四元数,并且每帧都紧缩。
这是我的代码,用于通过轴和旋转角度构造四元数。

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

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

最佳答案



不,它不能。

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

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

如果将slerp用于此类动画,则四元数对它们不利。

四元数只能在小于360度的角度之间切换。

如果仍要执行此操作,请使用其他表示形式,例如axis-angle。

关于c++ - 如何使用四元数来描述大于360度的旋转角度?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53851544/

10-13 00:04