예제 #1
0
    /// <summary>
    /// 向目标角度旋转
    /// </summary>
    /// <param name="from"></param>
    /// <param name="to"></param>
    /// <param name="maxDegreesDelta"></param>
    /// <returns></returns>
    public static Quaterniond RotateTowards(Quaterniond from, Quaterniond to, double maxDegreesDelta)
    {
        double      num    = Quaterniond.Angle(from, to);
        Quaterniond result = new Quaterniond();

        if (num == 0f)
        {
            result = to;
        }
        else
        {
            double t = Math.Min(1f, maxDegreesDelta / num);
            result = Quaterniond.SlerpUnclamped(from, to, t);
        }
        return(result);
    }
예제 #2
0
    public void SlerpUnclamped()
    {
        for (int i = 0; i < count; i++)
        {
            Quaternion  a  = new Quaternion();
            Quaternion  b  = new Quaternion();
            Quaterniond ad = new Quaterniond();
            Quaterniond bd = new Quaterniond();

            float p = UnityEngine.Random.Range(2F, 3F);

            RandomQuaternion(ref a, ref ad);
            RandomQuaternion(ref b, ref bd);

            Quaternion  value  = Quaternion.SlerpUnclamped(a, b, p);
            Quaterniond valued = Quaterniond.SlerpUnclamped(ad, bd, p);

            Assert.True(Approximate(value, valued));
        }
    }