Advertisement
Guest User

Untitled

a guest
Jun 24th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.69 KB | None | 0 0
  1. public static class QuaternionExtensions
  2.     {
  3.         public static Quaternion Pow(this Quaternion input, float power)
  4.         {
  5.             float inputMagnitude = input.Magnitude();
  6.             Vector3 nHat = new Vector3(input.x, input.y, input.z).normalized;
  7.             Quaternion vectorBit = new Quaternion(nHat.x, nHat.y, nHat.z, 0)
  8.                 .ScalarMultiply(power * Mathf.Acos(input.w / inputMagnitude))
  9.                 .Exp();
  10.             return vectorBit.ScalarMultiply(Mathf.Pow(inputMagnitude, power));
  11.         }
  12.  
  13.         public static Quaternion Exp(this Quaternion input)
  14.         {
  15.             float inputA = input.w;
  16.             Vector3 inputV = new Vector3(input.x, input.y, input.z);
  17.             float outputA = Mathf.Exp(inputA) * Mathf.Cos(inputV.magnitude);
  18.             Vector3 outputV = Mathf.Exp(inputA) * (inputV.normalized * Mathf.Sin(inputV.magnitude));
  19.             return new Quaternion(outputV.x, outputV.y, outputV.z, outputA);
  20.         }
  21.  
  22.         public static float Magnitude(this Quaternion input)
  23.         {
  24.             return Mathf.Sqrt(input.x * input.x + input.y * input.y + input.z * input.z + input.w * input.w);
  25.         }
  26.  
  27.         public static Quaternion ScalarMultiply(this Quaternion input, float scalar)
  28.         {
  29.             return new Quaternion(input.x * scalar, input.y * scalar, input.z * scalar, input.w * scalar);
  30.         }
  31.  
  32.         public static Quaternion Normalize(this Quaternion input)
  33.         {
  34.             input = input.ScalarMultiply(2f);
  35.             float magnitude = input.Magnitude() - float.Epsilon;
  36.             return new Quaternion(input.x / magnitude, input.y / magnitude, input.z / magnitude, input.w / magnitude);
  37.         }
  38.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement