Axiom.Math.Quaternion.Slerp C# (CSharp) Method

Slerp() public static method

public static Slerp ( Real time, Quaternion quatA, Quaternion quatB, bool useShortestPath ) : Quaternion
time Real
quatA Quaternion
quatB Quaternion
useShortestPath bool
return Quaternion
		public static Quaternion Slerp( Real time, Quaternion quatA, Quaternion quatB, bool useShortestPath )
		{
			Real cos = quatA.Dot( quatB );

			Real angle = (Real)Utility.ACos( cos );

			if ( Utility.Abs( angle ) < EPSILON )
			{
				return quatA;
			}

			Real sin = Utility.Sin( angle );
			Real inverseSin = 1.0f / sin;
			Real coeff0 = Utility.Sin( ( 1.0f - time ) * angle ) * inverseSin;
			Real coeff1 = Utility.Sin( time * angle ) * inverseSin;

			Quaternion result;

			if ( cos < 0.0f && useShortestPath )
			{
				coeff0 = -coeff0;
				// taking the complement requires renormalisation
				Quaternion t = coeff0 * quatA + coeff1 * quatB;
				t.Normalize();
				result = t;
			}
			else
			{
				result = ( coeff0 * quatA + coeff1 * quatB );
			}

			return result;
		}

Same methods

Quaternion::Slerp ( Real time, Quaternion quatA, Quaternion quatB ) : Quaternion