Struct Matrix4x4
A structure representing 4x4 matrix.
Namespace: ISynergy.Framework.Mathematics
Assembly: ISynergy.Framework.Mathematics.dll
Syntax
public struct Matrix4x4
Remarks
The structure incapsulates elements of a 4x4 matrix and provides some operations with it.
Fields
View SourceV00
Row 0 column 0 element of the matrix.
Declaration
public float V00
Field Value
Type | Description |
---|---|
System.Single |
V01
Row 0 column 1 element of the matrix.
Declaration
public float V01
Field Value
Type | Description |
---|---|
System.Single |
V02
Row 0 column 2 element of the matrix.
Declaration
public float V02
Field Value
Type | Description |
---|---|
System.Single |
V03
Row 0 column 3 element of the matrix.
Declaration
public float V03
Field Value
Type | Description |
---|---|
System.Single |
V10
Row 1 column 0 element of the matrix.
Declaration
public float V10
Field Value
Type | Description |
---|---|
System.Single |
V11
Row 1 column 1 element of the matrix.
Declaration
public float V11
Field Value
Type | Description |
---|---|
System.Single |
V12
Row 1 column 2 element of the matrix.
Declaration
public float V12
Field Value
Type | Description |
---|---|
System.Single |
V13
Row 1 column 3 element of the matrix.
Declaration
public float V13
Field Value
Type | Description |
---|---|
System.Single |
V20
Row 2 column 0 element of the matrix.
Declaration
public float V20
Field Value
Type | Description |
---|---|
System.Single |
V21
Row 2 column 1 element of the matrix.
Declaration
public float V21
Field Value
Type | Description |
---|---|
System.Single |
V22
Row 2 column 2 element of the matrix.
Declaration
public float V22
Field Value
Type | Description |
---|---|
System.Single |
V23
Row 2 column 3 element of the matrix.
Declaration
public float V23
Field Value
Type | Description |
---|---|
System.Single |
V30
Row 3 column 0 element of the matrix.
Declaration
public float V30
Field Value
Type | Description |
---|---|
System.Single |
V31
Row 3 column 1 element of the matrix.
Declaration
public float V31
Field Value
Type | Description |
---|---|
System.Single |
V32
Row 3 column 2 element of the matrix.
Declaration
public float V32
Field Value
Type | Description |
---|---|
System.Single |
V33
Row 3 column 3 element of the matrix.
Declaration
public float V33
Field Value
Type | Description |
---|---|
System.Single |
Properties
View SourceIdentity
Provides an identity matrix with all diagonal elements set to 1.
Declaration
public static readonly Matrix4x4 Identity { get; }
Property Value
Type | Description |
---|---|
Matrix4x4 |
Methods
View SourceAdd(Matrix4x4, Matrix4x4)
Adds corresponding components of two matrices.
Declaration
public static Matrix4x4 Add(Matrix4x4 matrix1, Matrix4x4 matrix2)
Parameters
Type | Name | Description |
---|---|---|
Matrix4x4 | matrix1 | The matrix to add to. |
Matrix4x4 | matrix2 | The matrix to add to the first matrix. |
Returns
Type | Description |
---|---|
Matrix4x4 | Returns a matrix which components are equal to sum of corresponding components of the two specified matrices. |
CreateDiagonal(Vector4)
Creates a diagonal matrix using the specified vector as diagonal elements.
Declaration
public static Matrix4x4 CreateDiagonal(Vector4 vector)
Parameters
Type | Name | Description |
---|---|---|
Vector4 | vector | Vector to use for diagonal elements of the matrix. |
Returns
Type | Description |
---|---|
Matrix4x4 | Returns a diagonal matrix. |
CreateFromColumns(Vector4, Vector4, Vector4, Vector4)
Creates a matrix from 4 columns specified as vectors.
Declaration
public static Matrix4x4 CreateFromColumns(Vector4 column0, Vector4 column1, Vector4 column2, Vector4 column3)
Parameters
Type | Name | Description |
---|---|---|
Vector4 | column0 | First column of the matrix to create. |
Vector4 | column1 | Second column of the matrix to create. |
Vector4 | column2 | Third column of the matrix to create. |
Vector4 | column3 | Fourth column of the matrix to create. |
Returns
Type | Description |
---|---|
Matrix4x4 | Returns a matrix from specified columns. |
CreateFromRotation(Matrix3x3)
Creates 4x4 tranformation matrix from 3x3 rotation matrix.
Declaration
public static Matrix4x4 CreateFromRotation(Matrix3x3 rotationMatrix)
Parameters
Type | Name | Description |
---|---|---|
Matrix3x3 | rotationMatrix | Source 3x3 rotation matrix. |
Returns
Type | Description |
---|---|
Matrix4x4 | Returns 4x4 rotation matrix. |
Remarks
The source 3x3 rotation matrix is copied into the top left corner of the result 4x4 matrix, i.e. it represents 0th, 1st and 2nd row/column. The V33 element is set to 1 and the rest elements of 3rd row and 3rd column are set to zeros.
CreateFromRows(Vector4, Vector4, Vector4, Vector4)
Creates a matrix from 4 rows specified as vectors.
Declaration
public static Matrix4x4 CreateFromRows(Vector4 row0, Vector4 row1, Vector4 row2, Vector4 row3)
Parameters
Type | Name | Description |
---|---|---|
Vector4 | row0 | First row of the matrix to create. |
Vector4 | row1 | Second row of the matrix to create. |
Vector4 | row2 | Third row of the matrix to create. |
Vector4 | row3 | Fourth row of the matrix to create. |
Returns
Type | Description |
---|---|
Matrix4x4 | Returns a matrix from specified rows. |
CreateFromYawPitchRoll(Single, Single, Single)
Creates rotation matrix to rotate an object around X, Y and Z axes.
Declaration
public static Matrix4x4 CreateFromYawPitchRoll(float yaw, float pitch, float roll)
Parameters
Type | Name | Description |
---|---|---|
System.Single | yaw | Rotation angle around Y axis in radians. |
System.Single | pitch | Rotation angle around X axis in radians. |
System.Single | roll | Rotation angle around Z axis in radians. |
Returns
Type | Description |
---|---|
Matrix4x4 | Returns rotation matrix to rotate an object around all 3 axes. |
Remarks
note
The routine assumes roll-pitch-yaw rotation order, when creating rotation matrix, i.e. an object is first rotated around Z axis, then around X axis and finally around Y axis.
CreateLookAt(Vector3, Vector3)
Creates a view matrix for the specified camera position and target point.
Declaration
public static Matrix4x4 CreateLookAt(Vector3 cameraPosition, Vector3 cameraTarget)
Parameters
Type | Name | Description |
---|---|---|
Vector3 | cameraPosition | Position of camera. |
Vector3 | cameraTarget | Target point towards which camera is pointing. |
Returns
Type | Description |
---|---|
Matrix4x4 | Returns a view matrix. |
Remarks
Camera's "up" vector is supposed to be (0, 1, 0).
CreatePerspective(Single, Single, Single, Single)
Creates a perspective projection matrix.
Declaration
public static Matrix4x4 CreatePerspective(float width, float height, float nearPlaneDistance, float farPlaneDistance)
Parameters
Type | Name | Description |
---|---|---|
System.Single | width | Width of the view volume at the near view plane. |
System.Single | height | Height of the view volume at the near view plane. |
System.Single | nearPlaneDistance | Distance to the near view plane. |
System.Single | farPlaneDistance | Distance to the far view plane. |
Returns
Type | Description |
---|---|
Matrix4x4 | Return a perspective projection matrix. |
CreateRotationX(Single)
Creates rotation matrix around X axis.
Declaration
public static Matrix4x4 CreateRotationX(float radians)
Parameters
Type | Name | Description |
---|---|---|
System.Single | radians | Rotation angle around X axis in radians. |
Returns
Type | Description |
---|---|
Matrix4x4 | Returns rotation matrix to rotate an object around X axis. |
CreateRotationY(Single)
Creates rotation matrix around Y axis.
Declaration
public static Matrix4x4 CreateRotationY(float radians)
Parameters
Type | Name | Description |
---|---|---|
System.Single | radians | Rotation angle around Y axis in radians. |
Returns
Type | Description |
---|---|
Matrix4x4 | Returns rotation matrix to rotate an object around Y axis. |
CreateRotationZ(Single)
Creates rotation matrix around Z axis.
Declaration
public static Matrix4x4 CreateRotationZ(float radians)
Parameters
Type | Name | Description |
---|---|---|
System.Single | radians | Rotation angle around Z axis in radians. |
Returns
Type | Description |
---|---|
Matrix4x4 | Returns rotation matrix to rotate an object around Z axis. |
CreateTranslation(Vector3)
Creates translation matrix for the specified movement amount.
Declaration
public static Matrix4x4 CreateTranslation(Vector3 position)
Parameters
Type | Name | Description |
---|---|---|
Vector3 | position | Vector which set direction and amount of movement. |
Returns
Type | Description |
---|---|
Matrix4x4 | Returns translation matrix. |
Remarks
The specified vector is copied to the 3rd column of the result matrix. All diagonal elements are set to 1. The rest of matrix is initialized with zeros.
Equals(Matrix4x4)
Tests whether the matrix equals to the specified one.
Declaration
public bool Equals(Matrix4x4 matrix)
Parameters
Type | Name | Description |
---|---|---|
Matrix4x4 | matrix | The matrix to test equality with. |
Returns
Type | Description |
---|---|
System.Boolean | Returns true if the two matrices are equal or false otherwise. |
Equals(Object)
Tests whether the matrix equals to the specified object.
Declaration
public override bool Equals(object obj)
Parameters
Type | Name | Description |
---|---|---|
System.Object | obj | The object to test equality with. |
Returns
Type | Description |
---|---|
System.Boolean | Returns true if the matrix equals to the specified object or false otherwise. |
ExtractYawPitchRoll(out Single, out Single, out Single)
Extract rotation angles from the rotation matrix.
Declaration
public void ExtractYawPitchRoll(out float yaw, out float pitch, out float roll)
Parameters
Type | Name | Description |
---|---|---|
System.Single | yaw | Extracted rotation angle around Y axis in radians. |
System.Single | pitch | Extracted rotation angle around X axis in radians. |
System.Single | roll | Extracted rotation angle around Z axis in radians. |
Remarks
note
The routine assumes roll-pitch-yaw rotation order when extracting rotation angle. Using extracted angles with the CreateFromYawPitchRoll(Single, Single, Single) should provide same rotation matrix.
note
The method assumes the provided matrix represent valid rotation matrix.
Sample usage:
// assume we have a rotation matrix created like this
float yaw = 10.0f / 180 * Math.PI;
float pitch = 30.0f / 180 * Math.PI;
float roll = 45.0f / 180 * Math.PI;
Matrix4x4 rotationMatrix = Matrix3x3.CreateFromYawPitchRoll( yaw, pitch, roll );
// ...
// now somewhere in the code you may want to get rotation
// angles back from a matrix assuming same rotation order
float extractedYaw;
float extractedPitch;
float extractedRoll;
rotation.ExtractYawPitchRoll( out extractedYaw, out extractedPitch, out extractedRoll );
GetColumn(Int32)
Get column of the matrix.
Declaration
public Vector4 GetColumn(int index)
Parameters
Type | Name | Description |
---|---|---|
System.Int32 | index | Column index to get, [0, 3]. |
Returns
Type | Description |
---|---|
Vector4 | Returns specified column of the matrix as a vector. |
GetHashCode()
Returns the hashcode for this instance.
Declaration
public override int GetHashCode()
Returns
Type | Description |
---|---|
System.Int32 | A 32-bit signed integer hash code. |
GetRow(Int32)
Get row of the matrix.
Declaration
public Vector4 GetRow(int index)
Parameters
Type | Name | Description |
---|---|---|
System.Int32 | index | Row index to get, [0, 3]. |
Returns
Type | Description |
---|---|
Vector4 | Returns specified row of the matrix as a vector. |
Multiply(Matrix4x4, Matrix4x4)
Multiplies two specified matrices.
Declaration
public static Matrix4x4 Multiply(Matrix4x4 matrix1, Matrix4x4 matrix2)
Parameters
Type | Name | Description |
---|---|---|
Matrix4x4 | matrix1 | Matrix to multiply. |
Matrix4x4 | matrix2 | Matrix to multiply by. |
Returns
Type | Description |
---|---|
Matrix4x4 | Return new matrix, which the result of multiplication of the two specified matrices. |
Multiply(Matrix4x4, Vector4)
Multiplies specified matrix by the specified vector.
Declaration
public static Vector4 Multiply(Matrix4x4 matrix, Vector4 vector)
Parameters
Type | Name | Description |
---|---|---|
Matrix4x4 | matrix | Matrix to multiply by vector. |
Vector4 | vector | Vector to multiply matrix by. |
Returns
Type | Description |
---|---|
Vector4 | Returns new vector which is the result of multiplication of the specified matrix by the specified vector. |
Subtract(Matrix4x4, Matrix4x4)
Subtracts corresponding components of two matrices.
Declaration
public static Matrix4x4 Subtract(Matrix4x4 matrix1, Matrix4x4 matrix2)
Parameters
Type | Name | Description |
---|---|---|
Matrix4x4 | matrix1 | The matrix to subtract from. |
Matrix4x4 | matrix2 | The matrix to subtract from the first matrix. |
Returns
Type | Description |
---|---|
Matrix4x4 | Returns a matrix which components are equal to difference of corresponding components of the two specified matrices. |
ToArray()
Returns array representation of the matrix.
Declaration
public float[] ToArray()
Returns
Type | Description |
---|---|
System.Single[] | Returns array which contains all elements of the matrix in the row-major order. |
Operators
View SourceAddition(Matrix4x4, Matrix4x4)
Adds corresponding components of two matrices.
Declaration
public static Matrix4x4 operator +(Matrix4x4 matrix1, Matrix4x4 matrix2)
Parameters
Type | Name | Description |
---|---|---|
Matrix4x4 | matrix1 | The matrix to add to. |
Matrix4x4 | matrix2 | The matrix to add to the first matrix. |
Returns
Type | Description |
---|---|
Matrix4x4 | Returns a matrix which components are equal to sum of corresponding components of the two specified matrices. |
Equality(Matrix4x4, Matrix4x4)
Tests whether two specified matrices are equal.
Declaration
public static bool operator ==(Matrix4x4 matrix1, Matrix4x4 matrix2)
Parameters
Type | Name | Description |
---|---|---|
Matrix4x4 | matrix1 | The left-hand matrix. |
Matrix4x4 | matrix2 | The right-hand matrix. |
Returns
Type | Description |
---|---|
System.Boolean | Returns true if the two matrices are equal or false otherwise. |
Inequality(Matrix4x4, Matrix4x4)
Tests whether two specified matrices are not equal.
Declaration
public static bool operator !=(Matrix4x4 matrix1, Matrix4x4 matrix2)
Parameters
Type | Name | Description |
---|---|---|
Matrix4x4 | matrix1 | The left-hand matrix. |
Matrix4x4 | matrix2 | The right-hand matrix. |
Returns
Type | Description |
---|---|
System.Boolean | Returns true if the two matrices are not equal or false otherwise. |
Multiply(Matrix4x4, Matrix4x4)
Multiplies two specified matrices.
Declaration
public static Matrix4x4 operator *(Matrix4x4 matrix1, Matrix4x4 matrix2)
Parameters
Type | Name | Description |
---|---|---|
Matrix4x4 | matrix1 | Matrix to multiply. |
Matrix4x4 | matrix2 | Matrix to multiply by. |
Returns
Type | Description |
---|---|
Matrix4x4 | Return new matrix, which the result of multiplication of the two specified matrices. |
Multiply(Matrix4x4, Vector4)
Multiplies specified matrix by the specified vector.
Declaration
public static Vector4 operator *(Matrix4x4 matrix, Vector4 vector)
Parameters
Type | Name | Description |
---|---|---|
Matrix4x4 | matrix | Matrix to multiply by vector. |
Vector4 | vector | Vector to multiply matrix by. |
Returns
Type | Description |
---|---|
Vector4 | Returns new vector which is the result of multiplication of the specified matrix by the specified vector. |
Subtraction(Matrix4x4, Matrix4x4)
Subtracts corresponding components of two matrices.
Declaration
public static Matrix4x4 operator -(Matrix4x4 matrix1, Matrix4x4 matrix2)
Parameters
Type | Name | Description |
---|---|---|
Matrix4x4 | matrix1 | The matrix to subtract from. |
Matrix4x4 | matrix2 | The matrix to subtract from the first matrix. |
Returns
Type | Description |
---|---|
Matrix4x4 | Returns a matrix which components are equal to difference of corresponding components of the two specified matrices. |