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