/// <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 Angle() { for (int i = 0; i < count; i++) { Quaternion a = new Quaternion(); Quaternion b = new Quaternion(); Quaterniond ad = new Quaterniond(); Quaterniond bd = new Quaterniond(); RandomQuaternion(ref a, ref ad); RandomQuaternion(ref b, ref bd); float value = Quaternion.Angle(a, b); double valued = Quaterniond.Angle(ad, bd); Assert.True(Approximate(value, valued)); } }