예제 #1
0
        /// <summary>
        ///     This isn't quite a multiply, but the result may be useful in some situations.
        ///     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(Matrix4x3d left, Matrix3x4d right)
        {
            Matrix4d result;

            Mult(ref left, ref right, out result);
            return(result);
        }
예제 #2
0
        /// <summary>
        ///     This isn't quite a multiply, but the result may be useful in some situations.
        ///     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 Matrix4x3d left, ref Matrix3x4d right, out Matrix4d 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,
                   lM31 = left.Row2.X,
                   lM32 = left.Row2.Y,
                   lM33 = left.Row2.Z,
                   lM41 = left.Row3.X,
                   lM42 = left.Row3.Y,
                   lM43 = left.Row3.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;
            result.Row2.X = lM31 * rM11 + lM32 * rM21 + lM33 * rM31;
            result.Row2.Y = lM31 * rM12 + lM32 * rM22 + lM33 * rM32;
            result.Row2.Z = lM31 * rM13 + lM32 * rM23 + lM33 * rM33;
            result.Row2.W = lM31 * rM14 + lM32 * rM24 + lM33 * rM34;
            result.Row3.X = lM41 * rM11 + lM42 * rM21 + lM43 * rM31;
            result.Row3.Y = lM41 * rM12 + lM42 * rM22 + lM43 * rM32;
            result.Row3.Z = lM41 * rM13 + lM42 * rM23 + lM43 * rM33;
            result.Row3.W = lM41 * rM14 + lM42 * rM24 + lM43 * rM34;
        }
예제 #3
0
 /// <summary>
 ///     Calculate the transpose of the given matrix
 /// </summary>
 /// <param name="mat">The matrix to transpose</param>
 /// <param name="result">The result of the calculation</param>
 public static void Transpose(ref Matrix4x3d mat, out Matrix3x4d result)
 {
     result.Row0 = mat.Column0;
     result.Row1 = mat.Column1;
     result.Row2 = mat.Column2;
 }