Beispiel #1
0
 /// <summary>
 /// Returns the specified submatrix of the given matrix.
 /// </summary>
 /// <param name="matrix">The matrix whose submatrix is to returned.</param>
 /// <param name="row">The row to be removed.</param>
 /// <param name="column">The column to be removed.</param>
 public static Matrix2x3f Submatrix(Matrix3x4f matrix, int row, int column)
 {
     if (row < 0 || row > 2)
     {
         throw new ArgumentOutOfRangeException("row", "Rows for Matrix3x4f run from 0 to 2, inclusive.");
     }
     if (column < 0 || column > 3)
     {
         throw new ArgumentOutOfRangeException("column", "Columns for Matrix3x4f run from 0 to 3, inclusive.");
     }
     if (row == 0 && column == 0)
     {
         return(new Matrix2x3f(matrix.M22, matrix.M32, matrix.M23, matrix.M33, matrix.M24, matrix.M34));
     }
     else if (row == 0 && column == 1)
     {
         return(new Matrix2x3f(matrix.M21, matrix.M31, matrix.M23, matrix.M33, matrix.M24, matrix.M34));
     }
     else if (row == 0 && column == 2)
     {
         return(new Matrix2x3f(matrix.M21, matrix.M31, matrix.M22, matrix.M32, matrix.M24, matrix.M34));
     }
     else if (row == 0 && column == 3)
     {
         return(new Matrix2x3f(matrix.M21, matrix.M31, matrix.M22, matrix.M32, matrix.M23, matrix.M33));
     }
     else if (row == 1 && column == 0)
     {
         return(new Matrix2x3f(matrix.M12, matrix.M32, matrix.M13, matrix.M33, matrix.M14, matrix.M34));
     }
     else if (row == 1 && column == 1)
     {
         return(new Matrix2x3f(matrix.M11, matrix.M31, matrix.M13, matrix.M33, matrix.M14, matrix.M34));
     }
     else if (row == 1 && column == 2)
     {
         return(new Matrix2x3f(matrix.M11, matrix.M31, matrix.M12, matrix.M32, matrix.M14, matrix.M34));
     }
     else if (row == 1 && column == 3)
     {
         return(new Matrix2x3f(matrix.M11, matrix.M31, matrix.M12, matrix.M32, matrix.M13, matrix.M33));
     }
     else if (row == 2 && column == 0)
     {
         return(new Matrix2x3f(matrix.M12, matrix.M22, matrix.M13, matrix.M23, matrix.M14, matrix.M24));
     }
     else if (row == 2 && column == 1)
     {
         return(new Matrix2x3f(matrix.M11, matrix.M21, matrix.M13, matrix.M23, matrix.M14, matrix.M24));
     }
     else if (row == 2 && column == 2)
     {
         return(new Matrix2x3f(matrix.M11, matrix.M21, matrix.M12, matrix.M22, matrix.M14, matrix.M24));
     }
     else
     {
         return(new Matrix2x3f(matrix.M11, matrix.M21, matrix.M12, matrix.M22, matrix.M13, matrix.M23));
     }
 }
Beispiel #2
0
 /// <summary>
 /// Returns a matrix where each element is rounded to the nearest integral value.
 /// </summary>
 /// <param name="value">A matrix.</param>
 /// <param name="digits">The number of fractional digits in the return value.</param>
 /// <param name="mode">Specification for how to round value if it is midway between two other numbers.</param>
 /// <returns>The result of rounding value.</returns>
 public static Matrix3x4f Round(Matrix3x4f value, int digits, MidpointRounding mode)
 {
     return(new Matrix3x4f(Functions.Round(value.M11, digits, mode), Functions.Round(value.M21, digits, mode), Functions.Round(value.M31, digits, mode), Functions.Round(value.M12, digits, mode), Functions.Round(value.M22, digits, mode), Functions.Round(value.M32, digits, mode), Functions.Round(value.M13, digits, mode), Functions.Round(value.M23, digits, mode), Functions.Round(value.M33, digits, mode), Functions.Round(value.M14, digits, mode), Functions.Round(value.M24, digits, mode), Functions.Round(value.M34, digits, mode)));
 }
Beispiel #3
0
 /// <summary>
 /// Calculates the reciprocal of each element in the matrix.
 /// </summary>
 /// <param name="value">A matrix.</param>
 /// <returns>A matrix with the reciprocal of each of values elements.</returns>
 public static Matrix3x4f Reciprocal(Matrix3x4f value)
 {
     return(new Matrix3x4f(1 / value.M11, 1 / value.M21, 1 / value.M31, 1 / value.M12, 1 / value.M22, 1 / value.M32, 1 / value.M13, 1 / value.M23, 1 / value.M33, 1 / value.M14, 1 / value.M24, 1 / value.M34));
 }
Beispiel #4
0
 /// <summary>
 /// Constrains each element to a given range.
 /// </summary>
 /// <param name="value">A matrix to constrain.</param>
 /// <param name="min">The minimum values for each element.</param>
 /// <param name="max">The maximum values for each element.</param>
 /// <returns>A matrix with each element constrained to the given range.</returns>
 public static Matrix3x4f Clamp(Matrix3x4f value, Matrix3x4f min, Matrix3x4f max)
 {
     return(new Matrix3x4f(Functions.Clamp(value.M11, min.M11, max.M11), Functions.Clamp(value.M21, min.M21, max.M21), Functions.Clamp(value.M31, min.M31, max.M31), Functions.Clamp(value.M12, min.M12, max.M12), Functions.Clamp(value.M22, min.M22, max.M22), Functions.Clamp(value.M32, min.M32, max.M32), Functions.Clamp(value.M13, min.M13, max.M13), Functions.Clamp(value.M23, min.M23, max.M23), Functions.Clamp(value.M33, min.M33, max.M33), Functions.Clamp(value.M14, min.M14, max.M14), Functions.Clamp(value.M24, min.M24, max.M24), Functions.Clamp(value.M34, min.M34, max.M34)));
 }
Beispiel #5
0
 /// <summary>
 /// Returns a matrix where each element is rounded to the nearest integral value.
 /// </summary>
 /// <param name="value">A matrix.</param>
 /// <returns>The result of rounding value.</returns>
 public static Matrix3x4f Round(Matrix3x4f value)
 {
     return(new Matrix3x4f(Functions.Round(value.M11), Functions.Round(value.M21), Functions.Round(value.M31), Functions.Round(value.M12), Functions.Round(value.M22), Functions.Round(value.M32), Functions.Round(value.M13), Functions.Round(value.M23), Functions.Round(value.M33), Functions.Round(value.M14), Functions.Round(value.M24), Functions.Round(value.M34)));
 }
Beispiel #6
0
 public static Matrix3x4f Add(Matrix3x4f left, Matrix3x4f right)
 {
     return(new Matrix3x4f(left.M11 + right.M11, left.M21 + right.M21, left.M31 + right.M31, left.M12 + right.M12, left.M22 + right.M22, left.M32 + right.M32, left.M13 + right.M13, left.M23 + right.M23, left.M33 + right.M33, left.M14 + right.M14, left.M24 + right.M24, left.M34 + right.M34));
 }
Beispiel #7
0
 /// <summary>
 /// Returns a matrix that contains the highest value from each pair of elements.
 /// </summary>
 /// <param name="value1">The first matrix.</param>
 /// <param name="value2">The second matrix.</param>
 /// <returns>The highest of each element in left and the matching element in right.</returns>
 public static Matrix3x4f Max(Matrix3x4f value1, Matrix3x4f value2)
 {
     return(new Matrix3x4f(Functions.Max(value1.M11, value2.M11), Functions.Max(value1.M21, value2.M21), Functions.Max(value1.M31, value2.M31), Functions.Max(value1.M12, value2.M12), Functions.Max(value1.M22, value2.M22), Functions.Max(value1.M32, value2.M32), Functions.Max(value1.M13, value2.M13), Functions.Max(value1.M23, value2.M23), Functions.Max(value1.M33, value2.M33), Functions.Max(value1.M14, value2.M14), Functions.Max(value1.M24, value2.M24), Functions.Max(value1.M34, value2.M34)));
 }
Beispiel #8
0
 /// <summary>
 /// Determines whether any elements of a matrix satisfy a condition.
 /// </summary>
 /// <param name="value">A vector.</param>
 /// <param name="predicate">A function to test each element for a condition.</param>
 /// <returns>true if any element of the matrix passes the test in the specified
 /// predicate; otherwise, false.</returns>
 public static bool Any(Matrix3x4f value, Predicate <float> predicate)
 {
     return(predicate(value.M11) || predicate(value.M21) || predicate(value.M31) || predicate(value.M12) || predicate(value.M22) || predicate(value.M32) || predicate(value.M13) || predicate(value.M23) || predicate(value.M33) || predicate(value.M14) || predicate(value.M24) || predicate(value.M34));
 }
Beispiel #9
0
 /// <summary>
 /// Maps the elements of a matrix and returns the result.
 /// </summary>
 /// <param name="value">The matrix to map.</param>
 /// <param name="mapping">A mapping function to apply to each element.</param>
 /// <returns>The result of mapping each element of value.</returns>
 public static Matrix3x4f Map(Matrix3x4f value, Func <float, float> mapping)
 {
     return(new Matrix3x4f(mapping(value.M11), mapping(value.M21), mapping(value.M31), mapping(value.M12), mapping(value.M22), mapping(value.M32), mapping(value.M13), mapping(value.M23), mapping(value.M33), mapping(value.M14), mapping(value.M24), mapping(value.M34)));
 }
Beispiel #10
0
 public static Matrix3x4f Divide(Matrix3x4f matrix, float scalar)
 {
     return(new Matrix3x4f(matrix.M11 / scalar, matrix.M21 / scalar, matrix.M31 / scalar, matrix.M12 / scalar, matrix.M22 / scalar, matrix.M32 / scalar, matrix.M13 / scalar, matrix.M23 / scalar, matrix.M33 / scalar, matrix.M14 / scalar, matrix.M24 / scalar, matrix.M34 / scalar));
 }
Beispiel #11
0
 /// <summary>
 /// Determines whether any element of a matrix is non-zero.
 /// </summary>
 /// <param name="value">A vector.</param>
 /// <returns>true if any elements are non-zero; false otherwise.</returns>
 public static bool Any(Matrix3x4f value)
 {
     return(value.M11 != 0 || value.M21 != 0 || value.M31 != 0 || value.M12 != 0 || value.M22 != 0 || value.M32 != 0 || value.M13 != 0 || value.M23 != 0 || value.M33 != 0 || value.M14 != 0 || value.M24 != 0 || value.M34 != 0);
 }
Beispiel #12
0
 public static Matrix3x4f Multiply(Matrix3x4f matrix, float scalar)
 {
     return(new Matrix3x4f(matrix.M11 * scalar, matrix.M21 * scalar, matrix.M31 * scalar, matrix.M12 * scalar, matrix.M22 * scalar, matrix.M32 * scalar, matrix.M13 * scalar, matrix.M23 * scalar, matrix.M33 * scalar, matrix.M14 * scalar, matrix.M24 * scalar, matrix.M34 * scalar));
 }
Beispiel #13
0
 public static Matrix3x4f Multiply(Matrix3x4f left, Matrix4x4f right)
 {
     return(new Matrix3x4f(left.M11 * right.M11 + left.M12 * right.M21 + left.M13 * right.M31 + left.M14 * right.M41, left.M21 * right.M11 + left.M22 * right.M21 + left.M23 * right.M31 + left.M24 * right.M41, left.M31 * right.M11 + left.M32 * right.M21 + left.M33 * right.M31 + left.M34 * right.M41, left.M11 * right.M12 + left.M12 * right.M22 + left.M13 * right.M32 + left.M14 * right.M42, left.M21 * right.M12 + left.M22 * right.M22 + left.M23 * right.M32 + left.M24 * right.M42, left.M31 * right.M12 + left.M32 * right.M22 + left.M33 * right.M32 + left.M34 * right.M42, left.M11 * right.M13 + left.M12 * right.M23 + left.M13 * right.M33 + left.M14 * right.M43, left.M21 * right.M13 + left.M22 * right.M23 + left.M23 * right.M33 + left.M24 * right.M43, left.M31 * right.M13 + left.M32 * right.M23 + left.M33 * right.M33 + left.M34 * right.M43, left.M11 * right.M14 + left.M12 * right.M24 + left.M13 * right.M34 + left.M14 * right.M44, left.M21 * right.M14 + left.M22 * right.M24 + left.M23 * right.M34 + left.M24 * right.M44, left.M31 * right.M14 + left.M32 * right.M24 + left.M33 * right.M34 + left.M34 * right.M44));
 }
Beispiel #14
0
 public static Matrix3x4f Subtract(Matrix3x4f left, Matrix3x4f right)
 {
     return(new Matrix3x4f(left.M11 - right.M11, left.M21 - right.M21, left.M31 - right.M31, left.M12 - right.M12, left.M22 - right.M22, left.M32 - right.M32, left.M13 - right.M13, left.M23 - right.M23, left.M33 - right.M33, left.M14 - right.M14, left.M24 - right.M24, left.M34 - right.M34));
 }
Beispiel #15
0
 /// <summary>
 /// Calculates the transpose of the specified matrix.
 /// </summary>
 /// <param name="matrix">The matrix whose transpose is to be calculated.</param>
 /// <returns>The transpose of the specified matrix.</returns>
 public static Matrix4x3f Transpose(Matrix3x4f matrix)
 {
     return(new Matrix4x3f(matrix.M11, matrix.M12, matrix.M13, matrix.M14, matrix.M21, matrix.M22, matrix.M23, matrix.M24, matrix.M31, matrix.M32, matrix.M33, matrix.M34));
 }
Beispiel #16
0
 /// <summary>
 /// Multiplys the elements of two matrices and returns the result.
 /// </summary>
 /// <param name="left">The first matrix to modulate.</param>
 /// <param name="right">The second matrix to modulate.</param>
 /// <returns>The result of multiplying each element of left by the matching element in right.</returns>
 public static Matrix3x4f Modulate(Matrix3x4f left, Matrix3x4f right)
 {
     return(new Matrix3x4f(left.M11 * right.M11, left.M21 * right.M21, left.M31 * right.M31, left.M12 * right.M12, left.M22 * right.M22, left.M32 * right.M32, left.M13 * right.M13, left.M23 * right.M23, left.M33 * right.M33, left.M14 * right.M14, left.M24 * right.M24, left.M34 * right.M34));
 }
Beispiel #17
0
 public static Matrix2x4f Multiply(Matrix2x3f left, Matrix3x4f right)
 {
     return(new Matrix2x4f(left.M11 * right.M11 + left.M12 * right.M21 + left.M13 * right.M31, left.M21 * right.M11 + left.M22 * right.M21 + left.M23 * right.M31, left.M11 * right.M12 + left.M12 * right.M22 + left.M13 * right.M32, left.M21 * right.M12 + left.M22 * right.M22 + left.M23 * right.M32, left.M11 * right.M13 + left.M12 * right.M23 + left.M13 * right.M33, left.M21 * right.M13 + left.M22 * right.M23 + left.M23 * right.M33, left.M11 * right.M14 + left.M12 * right.M24 + left.M13 * right.M34, left.M21 * right.M14 + left.M22 * right.M24 + left.M23 * right.M34));
 }
Beispiel #18
0
 public static Matrix3x4f Negate(Matrix3x4f value)
 {
     return(new Matrix3x4f(-value.M11, -value.M21, -value.M31, -value.M12, -value.M22, -value.M32, -value.M13, -value.M23, -value.M33, -value.M14, -value.M24, -value.M34));
 }