/// <summary> /// Multiplies two instances. /// </summary> /// <param name="left">The left operand of the multiplication.</param> /// <param name="right">The right operand of the multiplication.</param> /// <param name="result">A new instance that is the result of the multiplication.</param> public static void Mult(ref Matrix2x3d left, ref Matrix3x4 right, out Matrix2x4d result) { double lM11 = left.Row0.X, lM12 = left.Row0.Y, lM13 = left.Row0.Z, lM21 = left.Row1.X, lM22 = left.Row1.Y, lM23 = left.Row1.Z, rM11 = right.Row0.X, rM12 = right.Row0.Y, rM13 = right.Row0.Z, rM14 = right.Row0.W, rM21 = right.Row1.X, rM22 = right.Row1.Y, rM23 = right.Row1.Z, rM24 = right.Row1.W, rM31 = right.Row2.X, rm32 = right.Row2.Y, rM33 = right.Row2.Z, rM34 = right.Row2.W; result.Row0.X = lM11 * rM11 + lM12 * rM21 + lM13 * rM31; result.Row0.Y = lM11 * rM12 + lM12 * rM22 + lM13 * rm32; result.Row0.Z = lM11 * rM13 + lM12 * rM23 + lM13 * rM33; result.Row0.W = lM11 * rM14 + lM12 * rM24 + lM13 * rM34; result.Row1.X = lM21 * rM11 + lM22 * rM21 + lM23 * rM31; result.Row1.Y = lM21 * rM12 + lM22 * rM22 + lM23 * rm32; result.Row1.Z = lM21 * rM13 + lM22 * rM23 + lM23 * rM33; result.Row1.W = lM21 * rM14 + lM22 * rM24 + lM23 * rM34; }
/// <summary> /// Multiplies two instances. /// </summary> /// <param name="left">The left operand of the multiplication.</param> /// <param name="right">The right operand of the multiplication.</param> /// <returns>A new instance that is the result of the multiplication.</returns> public static Matrix4d Mult(Matrix4x2d left, Matrix2x4d right) { Matrix4d result; Mult(ref left, ref right, out result); return(result); }
/// <summary> /// Calculate the transpose of the given matrix. /// </summary> /// <param name="mat">The matrix to transpose.</param> /// <param name="result">The transpose of the given matrix.</param> public static void Transpose(ref Matrix4x2d mat, out Matrix2x4d result) { result.Row0.X = mat.Row0.X; result.Row0.Y = mat.Row1.X; result.Row0.Z = mat.Row2.X; result.Row0.W = mat.Row3.X; result.Row1.X = mat.Row0.Y; result.Row1.Y = mat.Row1.Y; result.Row1.Z = mat.Row2.Y; result.Row1.W = mat.Row3.Y; }
/// <summary> /// Multiplies two instances. /// </summary> /// <param name="left">The left operand of the multiplication.</param> /// <param name="right">The right operand of the multiplication.</param> /// <param name="result">A new instance that is the result of the multiplication.</param> public static void Mult(ref Matrix4x2d left, ref Matrix2x4d right, out Matrix4d result) { double lM11 = left.Row0.X, lM12 = left.Row0.Y, lM21 = left.Row1.X, lM22 = left.Row1.Y, lM31 = left.Row2.X, lM32 = left.Row2.Y, lM41 = left.Row3.X, lM42 = left.Row3.Y, rM11 = right.Row0.X, rM12 = right.Row0.Y, rM13 = right.Row0.Z, rM14 = right.Row0.W, rM21 = right.Row1.X, rM22 = right.Row1.Y, rM23 = right.Row1.Z, rM24 = right.Row1.W; result.Row0.X = lM11 * rM11 + lM12 * rM21; result.Row0.Y = lM11 * rM12 + lM12 * rM22; result.Row0.Z = lM11 * rM13 + lM12 * rM23; result.Row0.W = lM11 * rM14 + lM12 * rM24; result.Row1.X = lM21 * rM11 + lM22 * rM21; result.Row1.Y = lM21 * rM12 + lM22 * rM22; result.Row1.Z = lM21 * rM13 + lM22 * rM23; result.Row1.W = lM21 * rM14 + lM22 * rM24; result.Row2.X = lM31 * rM11 + lM32 * rM21; result.Row2.Y = lM31 * rM12 + lM32 * rM22; result.Row2.Z = lM31 * rM13 + lM32 * rM23; result.Row2.W = lM31 * rM14 + lM32 * rM24; result.Row3.X = lM41 * rM11 + lM42 * rM21; result.Row3.Y = lM41 * rM12 + lM42 * rM22; result.Row3.Z = lM41 * rM13 + lM42 * rM23; result.Row3.W = lM41 * rM14 + lM42 * rM24; }