Пример #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 Matrix2x3d Submatrix(Matrix3x4d matrix, int row, int column)
 {
     if (row < 0 || row > 2)
     {
         throw new ArgumentOutOfRangeException("row", "Rows for Matrix3x4d run from 0 to 2, inclusive.");
     }
     if (column < 0 || column > 3)
     {
         throw new ArgumentOutOfRangeException("column", "Columns for Matrix3x4d run from 0 to 3, inclusive.");
     }
     if (row == 0 && column == 0)
     {
         return(new Matrix2x3d(matrix.M22, matrix.M32, matrix.M23, matrix.M33, matrix.M24, matrix.M34));
     }
     else if (row == 0 && column == 1)
     {
         return(new Matrix2x3d(matrix.M21, matrix.M31, matrix.M23, matrix.M33, matrix.M24, matrix.M34));
     }
     else if (row == 0 && column == 2)
     {
         return(new Matrix2x3d(matrix.M21, matrix.M31, matrix.M22, matrix.M32, matrix.M24, matrix.M34));
     }
     else if (row == 0 && column == 3)
     {
         return(new Matrix2x3d(matrix.M21, matrix.M31, matrix.M22, matrix.M32, matrix.M23, matrix.M33));
     }
     else if (row == 1 && column == 0)
     {
         return(new Matrix2x3d(matrix.M12, matrix.M32, matrix.M13, matrix.M33, matrix.M14, matrix.M34));
     }
     else if (row == 1 && column == 1)
     {
         return(new Matrix2x3d(matrix.M11, matrix.M31, matrix.M13, matrix.M33, matrix.M14, matrix.M34));
     }
     else if (row == 1 && column == 2)
     {
         return(new Matrix2x3d(matrix.M11, matrix.M31, matrix.M12, matrix.M32, matrix.M14, matrix.M34));
     }
     else if (row == 1 && column == 3)
     {
         return(new Matrix2x3d(matrix.M11, matrix.M31, matrix.M12, matrix.M32, matrix.M13, matrix.M33));
     }
     else if (row == 2 && column == 0)
     {
         return(new Matrix2x3d(matrix.M12, matrix.M22, matrix.M13, matrix.M23, matrix.M14, matrix.M24));
     }
     else if (row == 2 && column == 1)
     {
         return(new Matrix2x3d(matrix.M11, matrix.M21, matrix.M13, matrix.M23, matrix.M14, matrix.M24));
     }
     else if (row == 2 && column == 2)
     {
         return(new Matrix2x3d(matrix.M11, matrix.M21, matrix.M12, matrix.M22, matrix.M14, matrix.M24));
     }
     else
     {
         return(new Matrix2x3d(matrix.M11, matrix.M21, matrix.M12, matrix.M22, matrix.M13, matrix.M23));
     }
 }
Пример #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 Matrix3x4d Round(Matrix3x4d value, int digits, MidpointRounding mode)
 {
     return(new Matrix3x4d(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)));
 }
Пример #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 Matrix3x4d Reciprocal(Matrix3x4d value)
 {
     return(new Matrix3x4d(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));
 }
Пример #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 Matrix3x4d Clamp(Matrix3x4d value, Matrix3x4d min, Matrix3x4d max)
 {
     return(new Matrix3x4d(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)));
 }
Пример #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 Matrix3x4d Round(Matrix3x4d value)
 {
     return(new Matrix3x4d(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)));
 }
Пример #6
0
 public static Matrix3x4d Add(Matrix3x4d left, Matrix3x4d right)
 {
     return(new Matrix3x4d(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));
 }
Пример #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 Matrix3x4d Max(Matrix3x4d value1, Matrix3x4d value2)
 {
     return(new Matrix3x4d(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)));
 }
Пример #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(Matrix3x4d value, Predicate <double> 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));
 }
Пример #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(Matrix3x4d value, Func <double, 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)));
 }
Пример #10
0
 public static Matrix3x4d Divide(Matrix3x4d matrix, double scalar)
 {
     return(new Matrix3x4d(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));
 }
Пример #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(Matrix3x4d 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);
 }
Пример #12
0
 public static Matrix3x4d Multiply(Matrix3x4d matrix, double scalar)
 {
     return(new Matrix3x4d(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));
 }
Пример #13
0
 public static Matrix3x4d Multiply(Matrix3x4d left, Matrix4x4d right)
 {
     return(new Matrix3x4d(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));
 }
Пример #14
0
 public static Matrix3x4d Subtract(Matrix3x4d left, Matrix3x4d right)
 {
     return(new Matrix3x4d(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));
 }
Пример #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 Matrix4x3d Transpose(Matrix3x4d matrix)
 {
     return(new Matrix4x3d(matrix.M11, matrix.M12, matrix.M13, matrix.M14, matrix.M21, matrix.M22, matrix.M23, matrix.M24, matrix.M31, matrix.M32, matrix.M33, matrix.M34));
 }
Пример #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 Matrix3x4d Modulate(Matrix3x4d left, Matrix3x4d right)
 {
     return(new Matrix3x4d(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));
 }
Пример #17
0
 public static Matrix2x4d Multiply(Matrix2x3d left, Matrix3x4d right)
 {
     return(new Matrix2x4d(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));
 }
Пример #18
0
 public static Matrix3x4d Negate(Matrix3x4d value)
 {
     return(new Matrix3x4d(-value.M11, -value.M21, -value.M31, -value.M12, -value.M22, -value.M32, -value.M13, -value.M23, -value.M33, -value.M14, -value.M24, -value.M34));
 }