示例#1
0
 /// <summary>
 /// Adds two quaternions.
 /// </summary>
 /// <param name="left">A <see cref="QuaternionD"/> instance.</param>
 /// <param name="right">A <see cref="QuaternionD"/> instance.</param>
 /// <returns>A new <see cref="QuaternionD"/> instance containing the sum.</returns>
 public static QuaternionD operator +(QuaternionD left, QuaternionD right)
 {
     return(QuaternionD.Add(left, right));
 }
示例#2
0
 /// <summary>
 /// Multiplies quaternion <paramref name="a"/> by quaternion <paramref name="b"/>.
 /// </summary>
 /// <param name="left">A <see cref="QuaternionD"/> instance.</param>
 /// <param name="right">A <see cref="QuaternionD"/> instance.</param>
 /// <returns>A new <see cref="QuaternionD"/> containing the result.</returns>
 public static QuaternionD operator *(QuaternionD left, QuaternionD right)
 {
     return(QuaternionD.Multiply(left, right));
 }
示例#3
0
 /// <summary>
 /// Divides a scalar by a quaternion.
 /// </summary>
 /// <param name="q">A <see cref="QuaternionD"/> instance.</param>
 /// <param name="s">A scalar.</param>
 /// <returns>A <see cref="QuaternionD"/> instance to hold the result.</returns>
 public static QuaternionD operator /(double s, QuaternionD q)
 {
     return(QuaternionD.Multiply(q, 1 / s));
 }
示例#4
0
 /// <summary>
 /// Subtracts a quaternion from a quaternion.
 /// </summary>
 /// <param name="left">A <see cref="QuaternionD"/> instance.</param>
 /// <param name="right">A <see cref="QuaternionD"/> instance.</param>
 /// <returns>A new <see cref="QuaternionD"/> instance containing the difference.</returns>
 public static QuaternionD Subtract(QuaternionD left, QuaternionD right)
 {
     return(new QuaternionD(left.W - right.W, left.X - right.X, left.Y - right.Y, left.Z - right.Z));
 }
示例#5
0
 /// <summary>
 /// Subtracts a quaternion from a quaternion.
 /// </summary>
 /// <param name="a">A <see cref="QuaternionD"/> instance.</param>
 /// <param name="b">A <see cref="QuaternionD"/> instance.</param>
 /// <returns>A new <see cref="QuaternionD"/> instance containing the difference.</returns>
 public static QuaternionD operator -(QuaternionD a, QuaternionD b)
 {
     return(QuaternionD.Subtract(a, b));
 }
示例#6
0
 /// <summary>
 /// Multiplies a quaternion by a scalar.
 /// </summary>
 /// <param name="q">A <see cref="QuaternionD"/> instance.</param>
 /// <param name="s">A scalar.</param>
 /// <returns>A <see cref="QuaternionD"/> instance to hold the result.</returns>
 public static QuaternionD operator *(QuaternionD q, double s)
 {
     return(QuaternionD.Multiply(q, s));
 }
示例#7
0
		/// <summary>
		/// Multiplies a quaternion by a scalar.
		/// </summary>
		/// <param name="quaternion">A <see cref="QuaternionD"/> instance.</param>
		/// <param name="scalar">A scalar.</param>
		/// <returns>A <see cref="QuaternionD"/> instance to hold the result.</returns>
		public static QuaternionD Multiply(QuaternionD quaternion, double scalar)
		{
			QuaternionD result = new QuaternionD(quaternion);
			result.W *= scalar;
			result.X *= scalar;
			result.Y *= scalar;
			result.Z *= scalar;

			return result;
		}
示例#8
0
 /// <summary>
 /// Calculates the dot product of two quaternions.
 /// </summary>
 /// <param name="a">A <see cref="QuaternionD"/> instance.</param>
 /// <param name="b">A <see cref="QuaternionD"/> instance.</param>
 /// <returns>The dot product value.</returns>
 public static double DotProduct(QuaternionD a, QuaternionD b)
 {
     return(a.W * b.W + a.X * b.X + a.Y * b.Y + a.Z * b.Z);
 }
示例#9
0
		/// <summary>
		/// Multiplies quaternion <paramref name="a"/> by quaternion <paramref name="b"/>.
		/// </summary>
		/// <param name="left">A <see cref="QuaternionD"/> instance.</param>
		/// <param name="right">A <see cref="QuaternionD"/> instance.</param>
		/// <returns>A new <see cref="QuaternionD"/> containing the result.</returns>
		public static QuaternionD Multiply(QuaternionD left, QuaternionD right)
		{
			QuaternionD result = new QuaternionD();
			result.W = left.W * right.W - left.X * right.X - left.Y * right.Y - left.Z * right.Z;
			result.X = left.W * right.X + left.X * right.W + left.Y * right.Z - left.Z * right.Y;
			result.Y = left.W * right.Y + left.Y * right.W + left.Z * right.X - left.X * right.Z;
			result.Z = left.W * right.Z + left.Z * right.W + left.X * right.Y - left.Y * right.X;

			return result;
		}
示例#10
0
		/// <summary>
		/// Multiplies quaternion <paramref name="a"/> by quaternion <paramref name="b"/> and put the result in a third quaternion.
		/// </summary>
		/// <param name="left">A <see cref="QuaternionD"/> instance.</param>
		/// <param name="right">A <see cref="QuaternionD"/> instance.</param>
		/// <param name="result">A <see cref="QuaternionD"/> instance to hold the result.</param>
		public static void Multiply(QuaternionD left, QuaternionD right, ref QuaternionD result)
		{
			result.W = left.W * right.W - left.X * right.X - left.Y * right.Y - left.Z * right.Z;
			result.X = left.W * right.X + left.X * right.W + left.Y * right.Z - left.Z * right.Y;
			result.Y = left.W * right.Y + left.Y * right.W + left.Z * right.X - left.X * right.Z;
			result.Z = left.W * right.Z + left.Z * right.W + left.X * right.Y - left.Y * right.X;
		}
示例#11
0
		/// <summary>
		/// Subtracts a quaternion from a quaternion and puts the result into a third quaternion.
		/// </summary>
		/// <param name="left">A <see cref="QuaternionD"/> instance.</param>
		/// <param name="right">A <see cref="QuaternionD"/> instance.</param>
		/// <param name="result">A <see cref="QuaternionD"/> instance to hold the result.</param>
		public static void Subtract(QuaternionD left, QuaternionD right, ref QuaternionD result)
		{
			result.W = left.W - right.W;
			result.X = left.X - right.X;
			result.Y = left.Y - right.Y;
			result.Z = left.Z - right.Z;
		}
示例#12
0
		/// <summary>
		/// Subtracts a quaternion from a quaternion.
		/// </summary>
		/// <param name="left">A <see cref="QuaternionD"/> instance.</param>
		/// <param name="right">A <see cref="QuaternionD"/> instance.</param>
		/// <returns>A new <see cref="QuaternionD"/> instance containing the difference.</returns>
		public static QuaternionD Subtract(QuaternionD left, QuaternionD right)
		{
			return new QuaternionD(left.W - right.W, left.X - right.X, left.Y - right.Y, left.Z - right.Z);
		}
示例#13
0
		/// <summary>
		/// Adds two quaternions and put the result in the third quaternion.
		/// </summary>
		/// <param name="left">A <see cref="QuaternionD"/> instance.</param>
		/// <param name="right">A <see cref="QuaternionD"/> instance.</param>
		/// <param name="result">A <see cref="QuaternionD"/> instance to hold the result.</param>
		public static void Add(QuaternionD left, QuaternionD right, ref QuaternionD result)
		{
			result.W = left.W + right.W;
			result.X = left.X + right.X;
			result.Y = left.Y + right.Y;
			result.Z = left.Z + right.Z;
		}
示例#14
0
 /// <summary>
 /// Divides a quaternion by a scalar.
 /// </summary>
 /// <param name="quaternion">A <see cref="QuaternionD"/> instance.</param>
 /// <param name="scalar">A scalar.</param>
 /// <returns>A <see cref="QuaternionD"/> instance to hold the result.</returns>
 public static QuaternionD operator /(QuaternionD quaternion, double scalar)
 {
     return(QuaternionD.Divide(quaternion, scalar));
 }
示例#15
0
		/// <summary>
		/// Multiplies a quaternion by a scalar and put the result in a third quaternion.
		/// </summary>
		/// <param name="quaternion">A <see cref="QuaternionD"/> instance.</param>
		/// <param name="scalar">A scalar.</param>
		/// <param name="result">A <see cref="QuaternionD"/> instance to hold the result.</param>
		public static void Multiply(QuaternionD quaternion, double scalar, ref QuaternionD result)
		{
			result.W = quaternion.W * scalar;
			result.X = quaternion.X * scalar;
			result.Y = quaternion.Y * scalar;
			result.Z = quaternion.Z * scalar;
		}
示例#16
0
		/// <summary>
		/// Adds two quaternions.
		/// </summary>
		/// <param name="left">A <see cref="QuaternionD"/> instance.</param>
		/// <param name="right">A <see cref="QuaternionD"/> instance.</param>
		/// <returns>A new <see cref="QuaternionD"/> instance containing the sum.</returns>
		public static QuaternionD Add(QuaternionD left, QuaternionD right)
		{
			return new QuaternionD(left.W + right.W, left.X + right.X, left.Y + right.Y, left.Z + right.Z);
		}
示例#17
0
		/// <summary>
		/// Divides a quaternion by a scalar.
		/// </summary>
		/// <param name="quaternion">A <see cref="QuaternionD"/> instance.</param>
		/// <param name="scalar">A scalar.</param>
		/// <returns>A <see cref="QuaternionD"/> instance to hold the result.</returns>
		public static QuaternionD Divide(QuaternionD quaternion, double scalar)
		{
			if (scalar == 0)
			{
				throw new DivideByZeroException("Dividing quaternion by zero");
			}

			QuaternionD result = new QuaternionD(quaternion);

			result.W /= scalar;
			result.X /= scalar;
			result.Y /= scalar;
			result.Z /= scalar;

			return result;
		}
示例#18
0
 /// <summary>
 /// Adds two quaternions.
 /// </summary>
 /// <param name="a">A <see cref="QuaternionD"/> instance.</param>
 /// <param name="b">A <see cref="QuaternionD"/> instance.</param>
 /// <returns>A new <see cref="QuaternionD"/> instance containing the sum.</returns>
 public static QuaternionD operator +(QuaternionD a, QuaternionD b)
 {
     return(QuaternionD.Add(a, b));
 }
示例#19
0
		/// <summary>
		/// Divides a quaternion by a scalar and put the result in a third quaternion.
		/// </summary>
		/// <param name="quaternion">A <see cref="QuaternionD"/> instance.</param>
		/// <param name="scalar">A scalar.</param>
		/// <param name="result">A <see cref="QuaternionD"/> instance to hold the result.</param>
		public static void Divide(QuaternionD quaternion, double scalar, ref QuaternionD result)
		{
			if (scalar == 0)
			{
				throw new DivideByZeroException("Dividing quaternion by zero");
			}

			result.W = quaternion.W / scalar;
			result.X = quaternion.X / scalar;
			result.Y = quaternion.Y / scalar;
			result.Z = quaternion.Z / scalar;
		}
示例#20
0
 /// <summary>
 /// Multiplies quaternion <paramref name="a"/> by quaternion <paramref name="b"/>.
 /// </summary>
 /// <param name="a">A <see cref="QuaternionD"/> instance.</param>
 /// <param name="b">A <see cref="QuaternionD"/> instance.</param>
 /// <returns>A new <see cref="QuaternionD"/> containing the result.</returns>
 public static QuaternionD operator *(QuaternionD a, QuaternionD b)
 {
     return(QuaternionD.Multiply(a, b));
 }
示例#21
0
		/// <summary>
		/// Calculates the dot product of two quaternions.
		/// </summary>
		/// <param name="left">A <see cref="QuaternionD"/> instance.</param>
		/// <param name="right">A <see cref="QuaternionD"/> instance.</param>
		/// <returns>The dot product value.</returns>
		public static double DotProduct(QuaternionD left, QuaternionD right)
		{
			return left.W * right.W + left.X * right.X + left.Y * right.Y + left.Z * right.Z;
		}
示例#22
0
 /// <summary>
 /// Divides a quaternion by a scalar.
 /// </summary>
 /// <param name="q">A <see cref="QuaternionD"/> instance.</param>
 /// <param name="s">A scalar.</param>
 /// <returns>A <see cref="QuaternionD"/> instance to hold the result.</returns>
 public static QuaternionD operator /(QuaternionD q, double s)
 {
     return(QuaternionD.Divide(q, s));
 }
示例#23
0
		/// <summary>
		/// Calculates the logarithm of a given quaternion.
		/// </summary>
		/// <param name="quaternion">A <see cref="QuaternionD"/> instance.</param>
		/// <returns>The quaternion's logarithm.</returns>
		public static QuaternionD Log(QuaternionD quaternion)
		{
			QuaternionD result = new QuaternionD(0, 0, 0, 0);

			if (MathFunctions.Abs(quaternion.W) < 1.0)
			{
				double angle = System.Math.Acos(quaternion.W);
				double sin = System.Math.Sin(angle);

				if (MathFunctions.Abs(sin) >= 0)
				{
					double coeff = angle / sin;
					result.X = coeff * quaternion.X;
					result.Y = coeff * quaternion.Y;
					result.Z = coeff * quaternion.Z;
				}
				else
				{
					result.X = quaternion.X;
					result.Y = quaternion.Y;
					result.Z = quaternion.Z;
				}
			}

			return result;
		}
示例#24
0
 /// <summary>
 /// Adds two quaternions.
 /// </summary>
 /// <param name="left">A <see cref="QuaternionD"/> instance.</param>
 /// <param name="right">A <see cref="QuaternionD"/> instance.</param>
 /// <returns>A new <see cref="QuaternionD"/> instance containing the sum.</returns>
 public static QuaternionD Add(QuaternionD left, QuaternionD right)
 {
     return(new QuaternionD(left.W + right.W, left.X + right.X, left.Y + right.Y, left.Z + right.Z));
 }
示例#25
0
		/// <summary>
		/// Calculates the exponent of a quaternion.
		/// </summary>
		/// <param name="quaternion">A <see cref="QuaternionD"/> instance.</param>
		/// <returns>The quaternion's exponent.</returns>
		public QuaternionD Exp(QuaternionD quaternion)
		{
			QuaternionD result = new QuaternionD(0, 0, 0, 0);

			double angle = System.Math.Sqrt(quaternion.X * quaternion.X + quaternion.Y * quaternion.Y + quaternion.Z * quaternion.Z);
			double sin = System.Math.Sin(angle);

			if (MathFunctions.Abs(sin) > 0)
			{
				double coeff = angle / sin;
				result.X = coeff * quaternion.X;
				result.Y = coeff * quaternion.Y;
				result.Z = coeff * quaternion.Z;
			}
			else
			{
				result.X = quaternion.X;
				result.Y = quaternion.Y;
				result.Z = quaternion.Z;
			}

			return result;
		}
示例#26
0
 /// <summary>
 /// Calculates the dot product of two quaternions.
 /// </summary>
 /// <param name="left">A <see cref="QuaternionD"/> instance.</param>
 /// <param name="right">A <see cref="QuaternionD"/> instance.</param>
 /// <returns>The dot product value.</returns>
 public static double DotProduct(QuaternionD left, QuaternionD right)
 {
     return(left.W * right.W + left.X * right.X + left.Y * right.Y + left.Z * right.Z);
 }
示例#27
0
		/// <summary>
		/// Initializes a new instance of the <see cref="QuaternionD"/> class using coordinates from a given <see cref="QuaternionD"/> instance.
		/// </summary>
		/// <param name="quaternion">A <see cref="QuaternionD"/> instance to copy the coordinates from.</param>
		public QuaternionD(QuaternionD quaternion)
		{
			_w = quaternion.W;
			_x = quaternion.X;
			_y = quaternion.Y;
			_z = quaternion.Z;
		}
示例#28
0
 /// <summary>
 /// Subtracts a quaternion from a quaternion.
 /// </summary>
 /// <param name="left">A <see cref="QuaternionD"/> instance.</param>
 /// <param name="right">A <see cref="QuaternionD"/> instance.</param>
 /// <returns>A new <see cref="QuaternionD"/> instance containing the difference.</returns>
 public static QuaternionD operator -(QuaternionD left, QuaternionD right)
 {
     return(QuaternionD.Subtract(left, right));
 }
示例#29
0
 /// <summary>
 /// Adds two quaternions.
 /// </summary>
 /// <param name="a">A <see cref="QuaternionD"/> instance.</param>
 /// <param name="b">A <see cref="QuaternionD"/> instance.</param>
 /// <returns>A new <see cref="QuaternionD"/> instance containing the sum.</returns>
 public static QuaternionD Add(QuaternionD a, QuaternionD b)
 {
     return(new QuaternionD(a.W + b.W, a.X + b.X, a.Y + b.Y, a.Z + b.Z));
 }
示例#30
0
 /// <summary>
 /// Multiplies a quaternion by a scalar.
 /// </summary>
 /// <param name="quaternion">A <see cref="QuaternionD"/> instance.</param>
 /// <param name="scalar">A scalar.</param>
 /// <returns>A <see cref="QuaternionD"/> instance to hold the result.</returns>
 public static QuaternionD operator *(QuaternionD quaternion, double scalar)
 {
     return(QuaternionD.Multiply(quaternion, scalar));
 }
示例#31
0
 /// <summary>
 /// Subtracts a quaternion from a quaternion.
 /// </summary>
 /// <param name="a">A <see cref="QuaternionD"/> instance.</param>
 /// <param name="b">A <see cref="QuaternionD"/> instance.</param>
 /// <returns>A new <see cref="QuaternionD"/> instance containing the difference.</returns>
 public static QuaternionD Subtract(QuaternionD a, QuaternionD b)
 {
     return(new QuaternionD(a.W - b.W, a.X - b.X, a.Y - b.Y, a.Z - b.Z));
 }
示例#32
0
 /// <summary>
 /// Divides a scalar by a quaternion.
 /// </summary>
 /// <param name="quaternion">A <see cref="QuaternionD"/> instance.</param>
 /// <param name="scalar">A scalar.</param>
 /// <returns>A <see cref="QuaternionD"/> instance to hold the result.</returns>
 public static QuaternionD operator /(double scalar, QuaternionD quaternion)
 {
     return(QuaternionD.Multiply(quaternion, (1.0 / scalar)));
 }
示例#33
0
		/// <summary>
		/// Converts the specified string to its <see cref="QuaternionD"/> equivalent.
		/// A return value indicates whether the conversion succeeded or failed.
		/// </summary>
		/// <param name="value">A string representation of a <see cref="QuaternionD"/>.</param>
		/// <param name="result">
		/// When this method returns, if the conversion succeeded,
		/// contains a <see cref="QuaternionD"/> representing the vector specified by <paramref name="value"/>.
		/// </param>
		/// <returns><see langword="true"/> if value was converted successfully; otherwise, <see langword="false"/>.</returns>
		public static bool TryParse(string value, out QuaternionD result)
		{
			Regex r = new Regex(@"\((?<w>.*),(?<x>.*),(?<y>.*),(?<z>.*)\)", RegexOptions.None);
			Match m = r.Match(value);
			if (m.Success)
			{
				result = new QuaternionD(
					double.Parse(m.Result("${x}")),
					double.Parse(m.Result("${y}")),
					double.Parse(m.Result("${z}")),
					double.Parse(m.Result("${w}"))
					);

				return true;
			}

			result = QuaternionD.Zero;
			return false;
		}