public void SetFromToRotation(TSVector fromDirection, TSVector toDirection) { TSQuaternion targetRotation = TSQuaternion.FromToRotation(fromDirection, toDirection); this.Set(targetRotation.x, targetRotation.y, targetRotation.z, targetRotation.w); }
/// <summary> /// Multiply two quaternions. /// </summary> /// <param name="quaternion1">The first quaternion.</param> /// <param name="quaternion2">The second quaternion.</param> /// <param name="result">The product of both quaternions.</param> public static void Multiply(ref TSQuaternion quaternion1, ref TSQuaternion quaternion2, out TSQuaternion result) { FP x = quaternion1.x; FP y = quaternion1.y; FP z = quaternion1.z; FP w = quaternion1.w; FP num4 = quaternion2.x; FP num3 = quaternion2.y; FP num2 = quaternion2.z; FP num = quaternion2.w; FP num12 = (y * num2) - (z * num3); FP num11 = (z * num4) - (x * num2); FP num10 = (x * num3) - (y * num4); FP num9 = ((x * num4) + (y * num3)) + (z * num2); result.x = ((x * num) + (num4 * w)) + num12; result.y = ((y * num) + (num3 * w)) + num11; result.z = ((z * num) + (num2 * w)) + num10; result.w = (w * num) - num9; }
static TSQuaternion() { identity = new TSQuaternion(0, 0, 0, 1); }
/// <summary> /// Quaternions are subtracted. /// </summary> /// <param name="quaternion1">The first quaternion.</param> /// <param name="quaternion2">The second quaternion.</param> /// <param name="result">The difference of both quaternions.</param> public static void Subtract(ref TSQuaternion quaternion1, ref TSQuaternion quaternion2, out TSQuaternion result) { result.x = quaternion1.x - quaternion2.x; result.y = quaternion1.y - quaternion2.y; result.z = quaternion1.z - quaternion2.z; result.w = quaternion1.w - quaternion2.w; }
public static TSQuaternion Lerp(TSQuaternion a, TSQuaternion b, FP t) { t = TSMath.Clamp(t, FP.Zero, FP.One); return(LerpUnclamped(a, b, t)); }
public static TSQuaternion Inverse(TSQuaternion rotation) { FP invNorm = FP.One / ((rotation.x * rotation.x) + (rotation.y * rotation.y) + (rotation.z * rotation.z) + (rotation.w * rotation.w)); return(TSQuaternion.Multiply(TSQuaternion.Conjugate(rotation), invNorm)); }
public static FP Dot(TSQuaternion a, TSQuaternion b) { return(a.w * b.w + a.x * b.x + a.y * b.y + a.z * b.z); }
/// <summary> /// Quaternions are added. /// </summary> /// <param name="quaternion1">The first quaternion.</param> /// <param name="quaternion2">The second quaternion.</param> /// <param name="result">The sum of both quaternions.</param> public static void Add(ref TSQuaternion quaternion1, ref TSQuaternion quaternion2, out TSQuaternion result) { result.x = quaternion1.x + quaternion2.x; result.y = quaternion1.y + quaternion2.y; result.z = quaternion1.z + quaternion2.z; result.w = quaternion1.w + quaternion2.w; }