View Source Graphmath.Mat44 (graphmath v2.6.0)
This is the 3D mathematics.
This submodule handles 4x4 matrices using tuples of floats.
Summary
Functions
add(a,b)
adds one mat44
to another mat44
.
apply( a, v )
transforms a vec4
by a mat44
.
apply_left( v, a )
transforms a vec4
by a mat44
, applied on the left.
apply_left_transpose( v, a )
transforms a vec3
by a transposed mat33
, applied on the left.
apply_transpose( a, v )
transforms a vec4
by a a transposed mat44
.
at( a, i, j)
selects an element of a mat44
.
column0( a )
selects the first column of a mat44
.
column1( a )
selects the second column of a mat44
.
column2( a )
selects the third column of a mat44
.
column3( a )
selects the fourth column of a mat44
.
diag( a )
selects the diagonal of a mat44
.
identity()
creates an identity mat44
.
inverse(a)
calculates the inverse matrix
make_rotate_x( theta )
creates a mat44
that rotates a vec3
by theta
radians about the +X axis.
make_rotate_y( theta )
creates a mat44
that rotates a vec3
by theta
radians about the +Y axis.
make_rotate_Z( theta )
creates a mat44
that rotates a vec3
by theta
radians about the +Z axis.
make_scale( k )
creates a mat44
that uniformly scales.
make_scale( sx, sy, sz, sw )
creates a mat44
that scales each axis independently.
make_translate( tx, ty, tz )
creates a mat44 that translates a point by tx, ty, and tz.
multiply( a, b )
multiply two matrices a and b together.
multiply_transpose( a, b )
multiply two matrices a and b<sup>T</sup> together.
round( a, sigfigs )
rounds every element of a mat44
to some number of decimal places.
row0( a )
selects the first row of a mat44
.
row1( a )
selects the second row of a mat44
.
row2( a )
selects the third row of a mat44
.
row3( a )
selects the fourth row of a mat44
.
scale( a, k )
scales every element in a mat44
by a coefficient k.
subtract(a,b)
subtracts one mat44
from another mat44
.
transform_point( a, v )
transforms a vec3
point by a mat44
.
transform_vector( a, v )
transforms a vec3
vector by a mat44
.
zero()
creates a zeroed mat44
.
Types
Functions
add(a,b)
adds one mat44
to another mat44
.
a
is the first mat44
.
b
is the second mat44
.
This returns a mat44
which is the element-wise sum of a
and b
.
apply( a, v )
transforms a vec4
by a mat44
.
a
is the mat44
to transform by.
v
is the vec4
to be transformed.
This returns a vec4
representing A**v**.
This is the "full" application of a matrix, and uses all elements.
apply_left( v, a )
transforms a vec4
by a mat44
, applied on the left.
a
is the mat44
to transform by.
v
is the vec4
to be transformed.
This returns a vec4
representing v**A**.
This is the "full" application of a matrix, and uses all elements.
apply_left_transpose( v, a )
transforms a vec3
by a transposed mat33
, applied on the left.
a
is the mat44
to transform by.
v
is the vec4
to be transformed.
This returns a vec4
representing v**A**<sup>T</sup>.
This is the "full" application of a matrix, and uses all elements.
apply_transpose( a, v )
transforms a vec4
by a a transposed mat44
.
a
is the mat44
to transform by.
v
is the vec4
to be transformed.
This returns a vec4
representing A<sup>T</sup>v.
This is the "full" application of a matrix, and uses all elements.
@spec at(mat44(), non_neg_integer(), non_neg_integer()) :: float()
at( a, i, j)
selects an element of a mat44
.
a
is the mat44
to index.
i
is the row integer index [0,3].
j
is the column integer index [0,3].
This returns a float from the matrix at row i
and column j
.
column0( a )
selects the first column of a mat44
.
a
is the mat44
to take the first column of.
This returns a vec4
representing the first column of a
.
column1( a )
selects the second column of a mat44
.
a
is the mat44
to take the second column of.
This returns a vec4
representing the second column of a
.
column2( a )
selects the third column of a mat44
.
a
is the mat44
to take the third column of.
This returns a vec4
representing the third column of a
.
column3( a )
selects the fourth column of a mat44
.
a
is the mat44
to take the fourth column of.
This returns a vec4
representing the fourth column of a
.
diag( a )
selects the diagonal of a mat44
.
a
is the mat44
to take the diagonal of.
This returns a vec4
representing the diagonal of a
.
@spec identity() :: mat44()
identity()
creates an identity mat44
.
This returns an identity mat44
.
inverse(a)
calculates the inverse matrix
a
is a mat44
to be inverted
Returs a mat44
representing a
<sup>-1</sup>
Raises an error when you try to calculate inverse of a matrix whose determinant is zero
make_rotate_x( theta )
creates a mat44
that rotates a vec3
by theta
radians about the +X axis.
theta
is the float of the number of radians of rotation the matrix will provide.
This returns a mat44
which rotates by theta
radians about the +X axis.
make_rotate_y( theta )
creates a mat44
that rotates a vec3
by theta
radians about the +Y axis.
theta
is the float of the number of radians of rotation the matrix will provide.
This returns a mat44
which rotates by theta
radians about the +Y axis.
make_rotate_Z( theta )
creates a mat44
that rotates a vec3
by theta
radians about the +Z axis.
theta
is the float of the number of radians of rotation the matrix will provide.
This returns a mat44
which rotates by theta
radians about the +Z axis.
make_scale( k )
creates a mat44
that uniformly scales.
k
is the float value to scale by.
This returns a mat44
whose diagonal is all k
s.
make_scale( sx, sy, sz, sw )
creates a mat44
that scales each axis independently.
sx
is a float for scaling the x-axis.
sy
is a float for scaling the y-axis.
sz
is a float for scaling the z-axis.
sw
is a float for scaling the w-axis.
This returns a mat44
whose diagonal is { sx, sy, sz, sw }
.
Note that, when used with vec3
s via the transform methods, sw
will have no effect.
make_translate( tx, ty, tz )
creates a mat44 that translates a point by tx, ty, and tz.
make_translate( tx, ty, tz )
creates a mat44 that translates a vec3 by (tx, ty, tz).
tx
is a float for translating along the x-axis.
ty
is a float for translating along the y-axis.
tz
is a float for translating along the z-axis.
This returns a mat44
which translates by a vec3
{ tx, ty, tz }
.
multiply( a, b )
multiply two matrices a and b together.
a
is the mat44
multiplicand.
b
is the mat44
multiplier.
This returns the mat44
product of the a
and b
.
multiply_transpose( a, b )
multiply two matrices a and b<sup>T</sup> together.
a
is the mat44
multiplicand.
b
is the mat44
multiplier.
This returns the mat44
product of the a
and b
<sup>T</sup>.
round( a, sigfigs )
rounds every element of a mat44
to some number of decimal places.
a
is the mat44
to round.
sigfigs
is an integer on [0,15] of the number of decimal places to round to.
This returns a mat44
which is the result of rounding a
.
row0( a )
selects the first row of a mat44
.
a
is the mat44
to take the first row of.
This returns a vec4
representing the first row of a
.
row1( a )
selects the second row of a mat44
.
a
is the mat44
to take the second row of.
This returns a vec4
representing the second row of a
.
row2( a )
selects the third row of a mat44
.
a
is the mat44
to take the third row of.
This returns a vec4
representing the third row of a
.
row3( a )
selects the fourth row of a mat44
.
a
is the mat44
to take the fourth row of.
This returns a vec4
representing the fourth row of a
.
scale( a, k )
scales every element in a mat44
by a coefficient k.
a
is the mat44
to scale.
k
is the float to scale by.
This returns a mat44
a
scaled element-wise by k
.
subtract(a,b)
subtracts one mat44
from another mat44
.
a
is the minuend.
b
is the subtraherd.
This returns a mat44
formed by the element-wise subtraction of b
from a
.
transform_point( a, v )
transforms a vec3
point by a mat44
.
a
is a mat44
used to transform the point.
v
is a vec3
to be transformed.
This returns a vec3
representing the application of a
to v
.
The point a
is internally treated as having a fourth coordinate equal to 1.0.
Note that transforming a point will work for all transforms.
transform_vector( a, v )
transforms a vec3
vector by a mat44
.
a
is a mat44
used to transform the point.
v
is a vec3
to be transformed.
This returns a vec3
representing the application of a
to v
.
The point a
is internally treated as having a fourth coordinate equal to 0.0.
Note that transforming a vector will work for only rotations, scales, and shears.
@spec zero() :: mat44()
zero()
creates a zeroed mat44
.
This returns a zeroed mat44
.