Show / Hide Table of Contents

Struct double4x4

Represents a 4x4 Matrix typically used in ComputerGraphics algorithms.

Implements
System.IEquatable<double4x4>
Inherited Members
System.Object.Equals(System.Object, System.Object)
System.Object.GetType()
System.Object.ReferenceEquals(System.Object, System.Object)
Namespace: Fusee.Math.Core
Assembly: Fusee.Math.Core.dll
Syntax
public struct double4x4 : IEquatable<double4x4>
Remarks

double4x4 objects represent matrices used in column-vector-notation, that means when used in common matrix-vector-multiplication scenarios, the vector should be multiplied from the right to the matrix (M * v). Concatenations of matrices from left to right represent a transformation where the rightmost matrix is applied first and the leftmost matrix is applied last, for example in (M3 * M2 * M1) * v the vector v is first transformed by M1, then by M2 and finally by M3. The translation part of a 4x4 matrix used in homogeneous coordinate calculations can be found in the leftmost column (M14 - x-translation, M24 - y-translation, M34 - z-translation).

Note that although double4x4 objects represent matrices in COLUMN-vector-NOTATION as found in math books, the objects' contents is physically stored in ROW-major-ORDER, meaning that in physical memory, a double4x4's components are stored contiguously in the following order: first row (M11, M12, M13, M14), then second row (M21, M22, M21, M24), and so on. When exchanging matrix contents with libraries like graphics engines (OpenGL, Direct3D), physics engines, file formats, etc. make sure to convert to and from the given Matrix layout of the API you are exchanging data with.

double4x4 contains convenience construction methods to create matrices commonly used in Computer Graphics. Most of these application matrices are handedness-agnostic, meaning that the resulting matrices can be used in both, left-handed and right-handed coordinate systems. This does not hold for LookAt and Projection matrices where the viewing direction plays a role. In left-handed coordinate systems the viewing direction is positive, meaning positions further away have bigger positive z-coordinates whereas in right-handed coordinate systems positions further away have smaller negative z-coordinates. By default, double4x4 will assume a left-handed coordinate system, but contains convenience construction methods to also create right-handed matrices if necessary. The right-handed versions of methods are postfixed with "RH".

Constructors

double4x4(double3x3)

Constructs a new double4x4 from a double3x3 by setting the 4th column and row to UnitW respectively.

Declaration
public double4x4(double3x3 f3x3)
Parameters
Type Name Description
double3x3 f3x3

The double3x3 matrix to copy components from.

double4x4(double4, double4, double4, double4)

Constructs a new instance.

Declaration
public double4x4(double4 row1, double4 row2, double4 row3, double4 row4)
Parameters
Type Name Description
double4 row1

Top row of the matrix

double4 row2

Second row of the matrix

double4 row3

Third row of the matrix

double4 row4

Bottom row of the matrix

double4x4(float4x4)

Constructs a new double4x4 by converting from a double4x4.

Declaration
public double4x4(float4x4 d4x4)
Parameters
Type Name Description
float4x4 d4x4

The double4x4 to copy components from.

double4x4(Double, Double, Double, Double, Double, Double, Double, Double, Double, Double, Double, Double, Double, Double, Double, Double)

Constructs a new instance.

Declaration
public double4x4(double m11, double m12, double m13, double m14, double m21, double m22, double m23, double m24, double m31, double m32, double m33, double m34, double m41, double m42, double m43, double m44)
Parameters
Type Name Description
System.Double m11

First item of the first row of the matrix.

System.Double m12

Second item of the first row of the matrix.

System.Double m13

Third item of the first row of the matrix.

System.Double m14

Fourth item of the first row of the matrix.

System.Double m21

First item of the second row of the matrix.

System.Double m22

Second item of the second row of the matrix.

System.Double m23

Third item of the second row of the matrix.

System.Double m24

Fourth item of the second row of the matrix.

System.Double m31

First item of the third row of the matrix.

System.Double m32

Second item of the third row of the matrix.

System.Double m33

Third item of the third row of the matrix.

System.Double m34

First item of the third row of the matrix.

System.Double m41

Fourth item of the fourth row of the matrix.

System.Double m42

Second item of the fourth row of the matrix.

System.Double m43

Third item of the fourth row of the matrix.

System.Double m44

Fourth item of the fourth row of the matrix.

Fields

Identity

The identity matrix

Declaration
public static readonly double4x4 Identity
Field Value
Type Description
double4x4

Row1

Top row of the matrix

Declaration
public double4 Row1
Field Value
Type Description
double4

Row2

2nd row of the matrix

Declaration
public double4 Row2
Field Value
Type Description
double4

Row3

3rd row of the matrix

Declaration
public double4 Row3
Field Value
Type Description
double4

Row4

Bottom row of the matrix

Declaration
public double4 Row4
Field Value
Type Description
double4

Zero

The zero matrix

Declaration
public static readonly double4x4 Zero
Field Value
Type Description
double4x4

Properties

Column1

The first column of this matrix

Declaration
public double4 Column1 { get; set; }
Property Value
Type Description
double4

Column2

The second column of this matrix

Declaration
public double4 Column2 { get; set; }
Property Value
Type Description
double4

Column3

The third column of this matrix

Declaration
public double4 Column3 { get; set; }
Property Value
Type Description
double4

Column4

The fourth column of this matrix

Declaration
public double4 Column4 { get; set; }
Property Value
Type Description
double4

Determinant

The determinant of this matrix

Declaration
public readonly double Determinant { get; }
Property Value
Type Description
System.Double

IsAffine

Checks whether row three (the projection part) of the matrix is equal to (0, 0, 0, 1). If this is the case the matrix is affine.

Declaration
public readonly bool IsAffine { get; }
Property Value
Type Description
System.Boolean

Item[Int32, Int32]

Sets/Gets value from given index

Declaration
public double this[int i, int j] { get; set; }
Parameters
Type Name Description
System.Int32 i

The ROW index

System.Int32 j

The COLUMN index

Property Value
Type Description
System.Double

M11

Gets and sets the value at row 1, column 1 of this instance.

Declaration
public double M11 { get; set; }
Property Value
Type Description
System.Double

M12

Gets and sets the value at row 1, column 2 of this instance.

Declaration
public double M12 { get; set; }
Property Value
Type Description
System.Double

M13

Gets and sets the value at row 1, column 3 of this instance.

Declaration
public double M13 { get; set; }
Property Value
Type Description
System.Double

M14

Gets and sets the value at row 1, column 4 of this instance.

Declaration
public double M14 { get; set; }
Property Value
Type Description
System.Double

M21

Gets and sets the value at row 2, column 1 of this instance.

Declaration
public double M21 { get; set; }
Property Value
Type Description
System.Double

M22

Gets and sets the value at row 2, column 2 of this instance.

Declaration
public double M22 { get; set; }
Property Value
Type Description
System.Double

M23

Gets and sets the value at row 2, column 3 of this instance.

Declaration
public double M23 { get; set; }
Property Value
Type Description
System.Double

M24

Gets and sets the value at row 2, column 4 of this instance.

Declaration
public double M24 { get; set; }
Property Value
Type Description
System.Double

M31

Gets and sets the value at row 3, column 1 of this instance.

Declaration
public double M31 { get; set; }
Property Value
Type Description
System.Double

M32

Gets and sets the value at row 3, column 2 of this instance.

Declaration
public double M32 { get; set; }
Property Value
Type Description
System.Double

M33

Gets and sets the value at row 3, column 3 of this instance.

Declaration
public double M33 { get; set; }
Property Value
Type Description
System.Double

M34

Gets and sets the value at row 3, column 4 of this instance.

Declaration
public double M34 { get; set; }
Property Value
Type Description
System.Double

M41

Gets and sets the value at row 4, column 1 of this instance.

Declaration
public double M41 { get; set; }
Property Value
Type Description
System.Double

M42

Gets and sets the value at row 4, column 2 of this instance.

Declaration
public double M42 { get; set; }
Property Value
Type Description
System.Double

M43

Gets and sets the value at row 4, column 3 of this instance.

Declaration
public double M43 { get; set; }
Property Value
Type Description
System.Double

M44

Gets and sets the value at row 4, column 4 of this instance.

Declaration
public double M44 { get; set; }
Property Value
Type Description
System.Double

Offset

Gets the offset part of the matrix as a double3 instance.

Declaration
public readonly double3 Offset { get; }
Property Value
Type Description
double3
Remarks

The offset part of the matrix consists of the M14, M24 and M34 components (in row major order notation).

ParseConverter

Gets and sets the Converter object. Has the ability to convert a string to a double4x4.

Declaration
public static Converter<string, double4x4> ParseConverter { get; set; }
Property Value
Type Description
Converter<System.String, double4x4>

The parse property.

Trace

Returns the trace of this matrix

Declaration
public readonly double Trace { get; }
Property Value
Type Description
System.Double

Methods

Add(in double4x4, in double4x4)

Adds two instances.

Declaration
public static double4x4 Add(in double4x4 left, in double4x4 right)
Parameters
Type Name Description
double4x4 left

The left operand of the addition.

double4x4 right

The right operand of the addition.

Returns
Type Description
double4x4

A new instance that is the result of the addition.

CreateFromAxisAngle(double3, Double)

Build a rotation matrix from the specified axis/angle rotation.

Declaration
public static double4x4 CreateFromAxisAngle(double3 axis, double angle)
Parameters
Type Name Description
double3 axis

The axis to rotate about.

System.Double angle

Angle to rotate counter-clockwise (looking in the direction of the given axis).

Returns
Type Description
double4x4

A matrix instance.

CreateOrthographic(Double, Double, Double, Double)

Creates a left handed orthographic projection matrix.

Declaration
public static double4x4 CreateOrthographic(double width, double height, double zNear, double zFar)
Parameters
Type Name Description
System.Double width

The width of the projection volume.

System.Double height

The height of the projection volume.

System.Double zNear

The near edge of the projection volume.

System.Double zFar

The far edge of the projection volume.

Returns
Type Description
double4x4

The resulting double4x4 instance.

CreateOrthographicOffCenter(Double, Double, Double, Double, Double, Double)

Creates a left handed orthographic projection matrix.

Declaration
public static double4x4 CreateOrthographicOffCenter(double left, double right, double bottom, double top, double zNear, double zFar)
Parameters
Type Name Description
System.Double left

The left edge of the projection volume.

System.Double right

The right edge of the projection volume.

System.Double bottom

The bottom edge of the projection volume.

System.Double top

The top edge of the projection volume.

System.Double zNear

The near edge of the projection volume.

System.Double zFar

The far edge of the projection volume.

Returns
Type Description
double4x4

The resulting double4x4 instance.

CreateOrthographicOffCenterRH(Double, Double, Double, Double, Double, Double)

Creates a right handed orthographic projection matrix.

Declaration
public static double4x4 CreateOrthographicOffCenterRH(double left, double right, double bottom, double top, double zNear, double zFar)
Parameters
Type Name Description
System.Double left

The left edge of the projection volume.

System.Double right

The right edge of the projection volume.

System.Double bottom

The bottom edge of the projection volume.

System.Double top

The top edge of the projection volume.

System.Double zNear

The near edge of the projection volume.

System.Double zFar

The far edge of the projection volume.

Returns
Type Description
double4x4

The resulting double4x4 instance.

CreatePerspectiveFieldOfView(Double, Double, Double, Double)

Creates a left handed perspective projection matrix.

Declaration
public static double4x4 CreatePerspectiveFieldOfView(double fovy, double aspect, double zNear, double zFar)
Parameters
Type Name Description
System.Double fovy

Angle of the field of view in the y direction (in radians)

System.Double aspect

Aspect ratio of the view (width / height)

System.Double zNear

Distance to the near clip plane

System.Double zFar

Distance to the far clip plane

Returns
Type Description
double4x4

A projection matrix that transforms camera space to raster space

Exceptions
Type Condition
System.ArgumentOutOfRangeException

Thrown under the following conditions:

  • fovy is zero, less than zero or larger than System.Math.PI
  • aspect is negative or zero
  • zNear is negative or zero
  • zFar is negative or zero
  • zNear is larger than zFar

CreatePerspectiveOffCenter(Double, Double, Double, Double, Double, Double)

Creates an left handed perspective projection matrix.

Declaration
public static double4x4 CreatePerspectiveOffCenter(double left, double right, double bottom, double top, double zNear, double zFar)
Parameters
Type Name Description
System.Double left

Left edge of the view frustum

System.Double right

Right edge of the view frustum

System.Double bottom

Bottom edge of the view frustum

System.Double top

Top edge of the view frustum

System.Double zNear

Distance to the near clip plane

System.Double zFar

Distance to the far clip plane

Returns
Type Description
double4x4

A projection matrix that transforms camera space to raster space

Exceptions
Type Condition
System.ArgumentOutOfRangeException

Thrown under the following conditions:

  • zNear is negative or zero
  • zFar is negative or zero
  • zNear is larger than zFar

CreatePerspectiveOffCenterRH(Double, Double, Double, Double, Double, Double)

Creates a right handed perspective projection matrix.

Declaration
public static double4x4 CreatePerspectiveOffCenterRH(double left, double right, double bottom, double top, double zNear, double zFar)
Parameters
Type Name Description
System.Double left

Left edge of the view frustum

System.Double right

Right edge of the view frustum

System.Double bottom

Bottom edge of the view frustum

System.Double top

Top edge of the view frustum

System.Double zNear

Distance to the near clip plane

System.Double zFar

Distance to the far clip plane

Returns
Type Description
double4x4

A right handed projection matrix that transforms camera space to raster space

Remarks

Generates a matrix mapping a frustum shaped volume (the viewing frustum) to the unit cube (ranging from -1 to 1 in each dimension, also in z). The sign of the z-value will be flipped for vectors multiplied with this matrix. Given that the underlying rendering platform interprets z-values returned by the vertex shader to be in left-handed coordinates, where increasing z-values indicate locations further away from the view point (as BOTH, Direct3D AND OpenGL do), this type of matrix is widely called to be a "right handed" projection matrix as it assumes a right-handed camera coordinate system.

Exceptions
Type Condition
System.ArgumentOutOfRangeException

Thrown under the following conditions:

  • zNear is negative or zero
  • zFar is negative or zero
  • zNear is larger than zFar

CreateRotationX(Double)

Builds a rotation matrix for a rotation around the x-axis.

Declaration
public static double4x4 CreateRotationX(double angle)
Parameters
Type Name Description
System.Double angle

The counter-clockwise angle in radians.

Returns
Type Description
double4x4

The resulting double4x4 instance.

CreateRotationXY(double2)

Builds a rotation matrix for a rotation around the y and x-axis.

Declaration
public static double4x4 CreateRotationXY(double2 xy)
Parameters
Type Name Description
double2 xy

counter-clockwise angles in radians.

Returns
Type Description
double4x4

CreateRotationXY(Double, Double)

Builds a rotation matrix for a rotation around the y and x-axis.

Declaration
public static double4x4 CreateRotationXY(double x, double y)
Parameters
Type Name Description
System.Double x

counter-clockwise angles in radians.

System.Double y

counter-clockwise angles in radians.

Returns
Type Description
double4x4

CreateRotationY(Double)

Builds a rotation matrix for a rotation around the y-axis.

Declaration
public static double4x4 CreateRotationY(double angle)
Parameters
Type Name Description
System.Double angle

The counter-clockwise angle in radians.

Returns
Type Description
double4x4

The resulting double4x4 instance.

CreateRotationZ(Double)

Builds a rotation matrix for a rotation around the z-axis.

Declaration
public static double4x4 CreateRotationZ(double angle)
Parameters
Type Name Description
System.Double angle

The counter-clockwise angle in radians.

Returns
Type Description
double4x4

The resulting double4x4 instance.

CreateRotationZX(double2)

Builds a rotation matrix for a rotation around the y and x-axis.

Declaration
public static double4x4 CreateRotationZX(double2 xz)
Parameters
Type Name Description
double2 xz

counter-clockwise angles in radians.

Returns
Type Description
double4x4

CreateRotationZX(Double, Double)

Builds a rotation matrix for a rotation around the y and x-axis.

Declaration
public static double4x4 CreateRotationZX(double x, double z)
Parameters
Type Name Description
System.Double x

counter-clockwise angles in radians.

System.Double z

counter-clockwise angles in radians.

Returns
Type Description
double4x4

CreateRotationZXY(double3)

Builds a rotation matrix for a rotation around the y and x-axis.

Declaration
public static double4x4 CreateRotationZXY(double3 xyz)
Parameters
Type Name Description
double3 xyz

counter-clockwise angles in radians.

Returns
Type Description
double4x4

CreateRotationZXY(Double, Double, Double)

Builds a rotation matrix for a rotation around the y and x-axis.

Declaration
public static double4x4 CreateRotationZXY(double x, double y, double z)
Parameters
Type Name Description
System.Double x

counter-clockwise angles in radians.

System.Double y

counter-clockwise angles in radians.

System.Double z

counter-clockwise angles in radians.

Returns
Type Description
double4x4

CreateRotationZY(double2)

Builds a rotation matrix for a rotation around the y and z-axis.

Declaration
public static double4x4 CreateRotationZY(double2 yz)
Parameters
Type Name Description
double2 yz

counter-clockwise angles in radians.

Returns
Type Description
double4x4

CreateRotationZY(Double, Double)

Builds a rotation matrix for a rotation around the y and x-axis.

Declaration
public static double4x4 CreateRotationZY(double y, double z)
Parameters
Type Name Description
System.Double y

counter-clockwise angles in radians.

System.Double z

counter-clockwise angles in radians.

Returns
Type Description
double4x4

CreateScale(double3)

Creates a scale matrix.

Declaration
public static double4x4 CreateScale(double3 vector)
Parameters
Type Name Description
double3 vector

The scale vector.

Returns
Type Description
double4x4

The resulting double4x4 instance.

CreateScale(Double)

Creates a uniform scale matrix with the same scale value along all three dimensions.

Declaration
public static double4x4 CreateScale(double scale)
Parameters
Type Name Description
System.Double scale

The value to scale about x, y, and z.

Returns
Type Description
double4x4

The resulting double4x4 instance.

CreateScale(Double, Double, Double)

Creates a scale matrix.

Declaration
public static double4x4 CreateScale(double x, double y, double z)
Parameters
Type Name Description
System.Double x

X scale.

System.Double y

Y scale.

System.Double z

Z scale.

Returns
Type Description
double4x4

The resulting double4x4 instance.

CreateTranslation(double3)

Creates a translation matrix.

Declaration
public static double4x4 CreateTranslation(double3 vector)
Parameters
Type Name Description
double3 vector

The translation vector.

Returns
Type Description
double4x4

The resulting double4x4 instance.

CreateTranslation(Double, Double, Double)

Creates a translation matrix.

Declaration
public static double4x4 CreateTranslation(double x, double y, double z)
Parameters
Type Name Description
System.Double x

X translation.

System.Double y

Y translation.

System.Double z

Z translation.

Returns
Type Description
double4x4

The resulting double4x4 instance.

Equals(double4x4)

Indicates whether the current matrix is equal to another matrix.

Declaration
public readonly bool Equals(double4x4 other)
Parameters
Type Name Description
double4x4 other

A matrix to compare with this matrix.

Returns
Type Description
System.Boolean

true if the current matrix is equal to the matrix parameter; otherwise, false.

Equals(Object)

Indicates whether this instance and a specified object are equal.

Declaration
public override readonly bool Equals(object obj)
Parameters
Type Name Description
System.Object obj

The object to compare the result.

Returns
Type Description
System.Boolean

True if the instances are equal; false otherwise.

Overrides
System.ValueType.Equals(System.Object)

GetHashCode()

Returns the hashcode for this instance.

Declaration
public override int GetHashCode()
Returns
Type Description
System.Int32

A System.Int32 containing the unique hashcode for this instance.

Overrides
System.ValueType.GetHashCode()

GetScale(double4x4)

Calculates the scale factor of the given double4x4 and returns it as a double3 vector.

Declaration
public static double3 GetScale(double4x4 mat)
Parameters
Type Name Description
double4x4 mat
Returns
Type Description
double3

GetTranslation(double4x4)

Calculates translation of the given double4x4 matrix and returns it as a double3 vector.

Declaration
public static double3 GetTranslation(double4x4 mat)
Parameters
Type Name Description
double4x4 mat
Returns
Type Description
double3

Invert()

Converts this instance into its inverse.

Declaration
public double4x4 Invert()
Returns
Type Description
double4x4

Invert(in double4x4)

Calculate the inverse of the given matrix. If you are unsure whether the matrix is invertible, check it with IsInvertable() first.

Declaration
public static double4x4 Invert(in double4x4 matrix)
Parameters
Type Name Description
double4x4 matrix

The matrix to invert.

Returns
Type Description
double4x4

The inverse of the given matrix.

IsInvertable(double4x4)

Checks if this matrix is invertible.

Declaration
public static bool IsInvertable(double4x4 mat)
Parameters
Type Name Description
double4x4 mat

The matrix.

Returns
Type Description
System.Boolean

IsInvertable(double4x4, out Double)

Checks if this matrix is invertible.

Declaration
public static bool IsInvertable(double4x4 mat, out double det)
Parameters
Type Name Description
double4x4 mat

The matrix.

System.Double det

The determinant of the matrix.

Returns
Type Description
System.Boolean

LookAt(double3, double3, double3)

Build a left handed world space to camera space matrix

Declaration
public static double4x4 LookAt(double3 eye, double3 target, double3 up)
Parameters
Type Name Description
double3 eye

Eye (camera) position in world space

double3 target

Target position in world space

double3 up

Up vector in world space (should not be parallel to the camera direction, that is target - eye)

Returns
Type Description
double4x4

A Matrix4 that transforms world space to camera space

LookAt(Double, Double, Double, Double, Double, Double, Double, Double, Double)

Build a world space to camera space matrix

Declaration
public static double4x4 LookAt(double eyeX, double eyeY, double eyeZ, double targetX, double targetY, double targetZ, double upX, double upY, double upZ)
Parameters
Type Name Description
System.Double eyeX

Eye (camera) position in world space

System.Double eyeY

Eye (camera) position in world space

System.Double eyeZ

Eye (camera) position in world space

System.Double targetX

Target position in world space

System.Double targetY

Target position in world space

System.Double targetZ

Target position in world space

System.Double upX

Up vector in world space (should not be parallel to the camera direction, that is target - eye)

System.Double upY

Up vector in world space (should not be parallel to the camera direction, that is target - eye)

System.Double upZ

Up vector in world space (should not be parallel to the camera direction, that is target - eye)

Returns
Type Description
double4x4

A double4x4 that transforms world space to camera space

LookAtRH(double3, double3, double3)

Build a right handed world space to camera space matrix

Declaration
public static double4x4 LookAtRH(double3 eye, double3 target, double3 up)
Parameters
Type Name Description
double3 eye

Eye (camera) position in world space

double3 target

Target position in world space

double3 up

Up vector in world space (should not be parallel to the camera direction, that is target - eye)

Returns
Type Description
double4x4

A double4x4 that transforms world space to camera space

Mult(in double4x4, in double4x4)

Multiplies two instances.

Declaration
public static double4x4 Mult(in double4x4 left, in double4x4 right)
Parameters
Type Name Description
double4x4 left

The left operand of the multiplication.

double4x4 right

The right operand of the multiplication.

Returns
Type Description
double4x4

A new instance that is the result of the multiplication

Parse(String, IFormatProvider)

Parses a string into a double4x4.

Declaration
public static double4x4 Parse(string source, IFormatProvider provider = null)
Parameters
Type Name Description
System.String source
System.IFormatProvider provider
Returns
Type Description
double4x4

RotationComponent()

The rotation component of this matrix.

Declaration
public double4x4 RotationComponent()
Returns
Type Description
double4x4

RotationDecomposition(double4x4)

Calculates and returns the rotation component of the given double4x4 matrix.

Declaration
public static double4x4 RotationDecomposition(double4x4 mat)
Parameters
Type Name Description
double4x4 mat
Returns
Type Description
double4x4

RotMatToEuler(double4x4)

Returns the euler angles from a given rotation matrix.

Declaration
public static double3 RotMatToEuler(double4x4 rotMat)
Parameters
Type Name Description
double4x4 rotMat

The rotation matrix.

Returns
Type Description
double3

Round()

Rounds this instance to 6 digits (max double precision).

Declaration
public double4x4 Round()
Returns
Type Description
double4x4

Round(double4x4)

Rounds the given matrix to 6 digits (max double precision).

Declaration
public static double4x4 Round(double4x4 mat)
Parameters
Type Name Description
double4x4 mat

The matrix to round.

Returns
Type Description
double4x4

The rounded matrix.

Scale()

The scale factors of this matrix.

Declaration
public double3 Scale()
Returns
Type Description
double3

Scale(double3)

Build a scaling matrix

Declaration
public static double4x4 Scale(double3 scale)
Parameters
Type Name Description
double3 scale

Scale factors for x,y and z axes

Returns
Type Description
double4x4

A scaling matrix

Scale(Double)

Build a scaling matrix

Declaration
public static double4x4 Scale(double scale)
Parameters
Type Name Description
System.Double scale

Single scale factor for x,y and z axes

Returns
Type Description
double4x4

A scaling matrix

Scale(Double, Double, Double)

Build a scaling matrix

Declaration
public static double4x4 Scale(double x, double y, double z)
Parameters
Type Name Description
System.Double x

Scale factor for x-axis

System.Double y

Scale factor for y-axis

System.Double z

Scale factor for z-axis

Returns
Type Description
double4x4

A scaling matrix

ScaleComponent()

The scale component of this matrix.

Declaration
public double4x4 ScaleComponent()
Returns
Type Description
double4x4

ScaleDecomposition(double4x4)

Calculates and returns the scale component of the given double4x4 matrix.

Declaration
public static double4x4 ScaleDecomposition(double4x4 mat)
Parameters
Type Name Description
double4x4 mat
Returns
Type Description
double4x4

Subtract(in double4x4, in double4x4)

Subtracts the right instance from the left instance.

Declaration
public static double4x4 Subtract(in double4x4 left, in double4x4 right)
Parameters
Type Name Description
double4x4 left

The left operand of the subtraction.

double4x4 right

The right operand of the subtraction.

Returns
Type Description
double4x4

A new instance that is the result of the subtraction.

ToArray()

Returns the matrix as double array.

Declaration
public double[] ToArray()
Returns
Type Description
System.Double[]

ToString()

Returns a System.String that represents the current double4x4.

Declaration
public override string ToString()
Returns
Type Description
System.String

A string.

Overrides
System.ValueType.ToString()

ToString(IFormatProvider)

Returns a System.String that represents the current double4x4.

Declaration
public string ToString(IFormatProvider provider)
Parameters
Type Name Description
System.IFormatProvider provider

Provides information about a specific culture.

Returns
Type Description
System.String

A System.String that represents this instance.

Transform(double4x4, double3)

Transforms a given 3D vector by a matrix using perspective division via matrix*vector (Postmultiplication of the vector).

Declaration
public static double3 Transform(double4x4 matrix, double3 vector)
Parameters
Type Name Description
double4x4 matrix

A double4x4 instance.

double3 vector

A double3 instance.

Returns
Type Description
double3

A new double3 instance containing the result.

Remarks

Before the matrix multiplication the 3D vector is extended to 4D by setting its W component to 1. After the matrix multiplication the resulting 4D vector is transformed to 3D by dividing X, Y, and Z by W. (perspective division).

Transform(double4x4, double4)

Transforms a given vector by a matrix via matrix*vector (Postmultiplication of the vector).

Declaration
public static double4 Transform(double4x4 matrix, double4 vector)
Parameters
Type Name Description
double4x4 matrix

A double4x4 instance.

double4 vector

A double4 instance.

Returns
Type Description
double4

A new double4 instance containing the result.

TransformPerspective(double4x4, double3)

Transforms a given 3D vector by a matrix, and projects the resulting double4 back to a double3.

Declaration
public static double3 TransformPerspective(double4x4 mat, double3 vec)
Parameters
Type Name Description
double4x4 mat

The desired transformation matrix.

double3 vec

The given vector.

Returns
Type Description
double3

The transformed vector.

TransformPerspective(double4x4, double4)

Transforms the given vector by the given matrix and applies a perspective division.

Declaration
public static double4 TransformPerspective(double4x4 mat, double4 vec)
Parameters
Type Name Description
double4x4 mat

The desired transformation.

double4 vec

The given vector.

Returns
Type Description
double4

The transformed vector.

TransformPremult(double3, double4x4)

Transforms a given 3D vector by a matrix using perspective division via vector*matrix (Premultiplication of the vector).

Declaration
public static double3 TransformPremult(double3 vector, double4x4 matrix)
Parameters
Type Name Description
double3 vector

A double3 instance.

double4x4 matrix

A double4x4 instance.

Returns
Type Description
double3

A new double3 instance containing the result.

Remarks

Before the matrix multiplication the 3D vector is extended to 4D by setting its W component to 1. After the matrix multiplication the resulting 4D vector is transformed to 3D by dividing X, Y, and Z by W. (perspective division).

TransformPremult(double4, double4x4)

Transforms a given vector by a matrix via vector*matrix (Premultiplication of the vector).

Declaration
public static double4 TransformPremult(double4 vector, double4x4 matrix)
Parameters
Type Name Description
double4 vector

A double4 instance.

double4x4 matrix

A double4x4 instance.

Returns
Type Description
double4

A new double4 instance containing the result.

Translation()

The translation of this matrix.

Declaration
public double3 Translation()
Returns
Type Description
double3

TranslationComponent()

The translation component of this matrix.

Declaration
public double4x4 TranslationComponent()
Returns
Type Description
double4x4

TranslationDecomposition(double4x4)

Calculates and returns only the translation component of the given double4x4 matrix.

Declaration
public static double4x4 TranslationDecomposition(double4x4 mat)
Parameters
Type Name Description
double4x4 mat
Returns
Type Description
double4x4

Transpose()

Converts this instance into its transpose.

Declaration
public double4x4 Transpose()
Returns
Type Description
double4x4

Transpose(double4x4)

Calculate the transpose of the given matrix

Declaration
public static double4x4 Transpose(double4x4 matrix)
Parameters
Type Name Description
double4x4 matrix

The matrix to transpose

Returns
Type Description
double4x4

The transpose of the given matrix

Operators

Addition(double4x4, double4x4)

Matrix addition

Declaration
public static double4x4 operator +(double4x4 left, double4x4 right)
Parameters
Type Name Description
double4x4 left

left-hand operand

double4x4 right

right-hand operand

Returns
Type Description
double4x4

A new double4x4 which holds the result of the multiplication

Equality(double4x4, double4x4)

Compares two instances for equality.

Declaration
public static bool operator ==(double4x4 left, double4x4 right)
Parameters
Type Name Description
double4x4 left

The first instance.

double4x4 right

The second instance.

Returns
Type Description
System.Boolean

True, if left equals right; false otherwise.

Explicit(float4x4 to double4x4)

Explicit cast operator to cast a double4x4 into a double4x4 value.

Declaration
public static explicit operator double4x4(float4x4 d4x4)
Parameters
Type Name Description
float4x4 d4x4

The double4x4 value to cast.

Returns
Type Description
double4x4

A double4x4 value.

Inequality(double4x4, double4x4)

Compares two instances for inequality.

Declaration
public static bool operator !=(double4x4 left, double4x4 right)
Parameters
Type Name Description
double4x4 left

The first instance.

double4x4 right

The second instance.

Returns
Type Description
System.Boolean

True, if left does not equal right; false otherwise.

Multiply(double3, double4x4)

Transforms a given three dimensional vector by a matrix via vector*matrix (pre-multiplication of the vector).

Declaration
public static double3 operator *(double3 vector, double4x4 matrix)
Parameters
Type Name Description
double3 vector

A double3 instance.

double4x4 matrix

A double4x4 instance.

Returns
Type Description
double3

A new double4 instance containing the result.

Remarks

Before the matrix multiplication the 3D vector is extended to 4D by setting its W component to 1. After the matrix multiplication the resulting 4D vector is transformed to 3D by dividing X, Y, and Z by W. (perspective division).

Multiply(double4, double4x4)

Transforms a given vector by a matrix via vector*matrix (pre-multiplication of the vector).

Declaration
public static double4 operator *(double4 vector, double4x4 matrix)
Parameters
Type Name Description
double4 vector

A double4 instance.

double4x4 matrix

A double4x4 instance.

Returns
Type Description
double4

A new double4 instance containing the result.

Multiply(double4x4, double3)

Transforms a given three dimensional vector by a matrix via matrix*vector (post-multiplication of the vector).

Declaration
public static double3 operator *(double4x4 matrix, double3 vector)
Parameters
Type Name Description
double4x4 matrix

A double4x4 instance.

double3 vector

A double3 instance.

Returns
Type Description
double3

A new double4 instance containing the result.

Remarks

Before the matrix multiplication the 3D vector is extended to 4D by setting its W component to 1. After the matrix multiplication the resulting 4D vector is transformed to 3D by dividing X, Y, and Z by W. (perspective division).

Multiply(double4x4, double4)

Transforms a given vector by a matrix via matrix*vector (post-multiplication of the vector).

Declaration
public static double4 operator *(double4x4 matrix, double4 vector)
Parameters
Type Name Description
double4x4 matrix

A double4x4 instance.

double4 vector

A double4 instance.

Returns
Type Description
double4

A new double4 instance containing the result.

Multiply(double4x4, double4x4)

Matrix multiplication

Declaration
public static double4x4 operator *(double4x4 left, double4x4 right)
Parameters
Type Name Description
double4x4 left

left-hand operand

double4x4 right

right-hand operand

Returns
Type Description
double4x4

A new Matrix44 which holds the result of the multiplication

Subtraction(double4x4, double4x4)

Matrix subtraction

Declaration
public static double4x4 operator -(double4x4 left, double4x4 right)
Parameters
Type Name Description
double4x4 left

left-hand operand

double4x4 right

right-hand operand

Returns
Type Description
double4x4

A new double2x2 which holds the result of the multiplication

Implements

System.IEquatable<T>
In This Article
  • Constructors
    • double4x4(double3x3)
    • double4x4(double4, double4, double4, double4)
    • double4x4(float4x4)
    • double4x4(Double, Double, Double, Double, Double, Double, Double, Double, Double, Double, Double, Double, Double, Double, Double, Double)
  • Fields
    • Identity
    • Row1
    • Row2
    • Row3
    • Row4
    • Zero
  • Properties
    • Column1
    • Column2
    • Column3
    • Column4
    • Determinant
    • IsAffine
    • Item[Int32, Int32]
    • M11
    • M12
    • M13
    • M14
    • M21
    • M22
    • M23
    • M24
    • M31
    • M32
    • M33
    • M34
    • M41
    • M42
    • M43
    • M44
    • Offset
    • ParseConverter
    • Trace
  • Methods
    • Add(in double4x4, in double4x4)
    • CreateFromAxisAngle(double3, Double)
    • CreateOrthographic(Double, Double, Double, Double)
    • CreateOrthographicOffCenter(Double, Double, Double, Double, Double, Double)
    • CreateOrthographicOffCenterRH(Double, Double, Double, Double, Double, Double)
    • CreatePerspectiveFieldOfView(Double, Double, Double, Double)
    • CreatePerspectiveOffCenter(Double, Double, Double, Double, Double, Double)
    • CreatePerspectiveOffCenterRH(Double, Double, Double, Double, Double, Double)
    • CreateRotationX(Double)
    • CreateRotationXY(double2)
    • CreateRotationXY(Double, Double)
    • CreateRotationY(Double)
    • CreateRotationZ(Double)
    • CreateRotationZX(double2)
    • CreateRotationZX(Double, Double)
    • CreateRotationZXY(double3)
    • CreateRotationZXY(Double, Double, Double)
    • CreateRotationZY(double2)
    • CreateRotationZY(Double, Double)
    • CreateScale(double3)
    • CreateScale(Double)
    • CreateScale(Double, Double, Double)
    • CreateTranslation(double3)
    • CreateTranslation(Double, Double, Double)
    • Equals(double4x4)
    • Equals(Object)
    • GetHashCode()
    • GetScale(double4x4)
    • GetTranslation(double4x4)
    • Invert()
    • Invert(in double4x4)
    • IsInvertable(double4x4)
    • IsInvertable(double4x4, out Double)
    • LookAt(double3, double3, double3)
    • LookAt(Double, Double, Double, Double, Double, Double, Double, Double, Double)
    • LookAtRH(double3, double3, double3)
    • Mult(in double4x4, in double4x4)
    • Parse(String, IFormatProvider)
    • RotationComponent()
    • RotationDecomposition(double4x4)
    • RotMatToEuler(double4x4)
    • Round()
    • Round(double4x4)
    • Scale()
    • Scale(double3)
    • Scale(Double)
    • Scale(Double, Double, Double)
    • ScaleComponent()
    • ScaleDecomposition(double4x4)
    • Subtract(in double4x4, in double4x4)
    • ToArray()
    • ToString()
    • ToString(IFormatProvider)
    • Transform(double4x4, double3)
    • Transform(double4x4, double4)
    • TransformPerspective(double4x4, double3)
    • TransformPerspective(double4x4, double4)
    • TransformPremult(double3, double4x4)
    • TransformPremult(double4, double4x4)
    • Translation()
    • TranslationComponent()
    • TranslationDecomposition(double4x4)
    • Transpose()
    • Transpose(double4x4)
  • Operators
    • Addition(double4x4, double4x4)
    • Equality(double4x4, double4x4)
    • Explicit(float4x4 to double4x4)
    • Inequality(double4x4, double4x4)
    • Multiply(double3, double4x4)
    • Multiply(double4, double4x4)
    • Multiply(double4x4, double3)
    • Multiply(double4x4, double4)
    • Multiply(double4x4, double4x4)
    • Subtraction(double4x4, double4x4)
  • Implements
Generated by DocFX
GitHub Repo
Back to top