pub struct SymmetricMat4 {
pub m00: f32,
pub m01: f32,
pub m02: f32,
pub m03: f32,
pub m11: f32,
pub m12: f32,
pub m13: f32,
pub m22: f32,
pub m23: f32,
pub m33: f32,
}
Expand description
The bottom left triangle (including the diagonal) of a symmetric 4x4 column-major matrix.
This is useful for storing a symmetric 4x4 matrix in a more compact form and performing some matrix operations more efficiently.
Some defining properties of symmetric matrices include:
- The matrix is equal to its transpose.
- The matrix has real eigenvalues.
- The eigenvectors corresponding to the eigenvalues are orthogonal.
- The matrix is always diagonalizable.
The sum and difference of two symmetric matrices is always symmetric.
However, the product of two symmetric matrices is only symmetric
if the matrices are commutable, meaning that AB = BA
.
Fields§
§m00: f32
The first element of the first column.
m01: f32
The second element of the first column.
m02: f32
The third element of the first column.
m03: f32
The fourth element of the first column.
m11: f32
The second element of the second column.
m12: f32
The third element of the second column.
m13: f32
The fourth element of the second column.
m22: f32
The third element of the third column.
m23: f32
The fourth element of the third column.
m33: f32
The fourth element of the fourth column.
Implementations§
Source§impl SymmetricMat4
impl SymmetricMat4
Sourcepub const IDENTITY: Self
pub const IDENTITY: Self
A symmetric 4x4 identity matrix, where all diagonal elements are 1.0
,
and all off-diagonal elements are 0.0
.
Sourcepub const fn new(
m00: f32,
m01: f32,
m02: f32,
m03: f32,
m11: f32,
m12: f32,
m13: f32,
m22: f32,
m23: f32,
m33: f32,
) -> Self
pub const fn new( m00: f32, m01: f32, m02: f32, m03: f32, m11: f32, m12: f32, m13: f32, m22: f32, m23: f32, m33: f32, ) -> Self
Creates a new symmetric 4x4 matrix from its bottom left triangle, including diagonal elements.
The elements are in column-major order mCR
, where C
is the column index
and R
is the row index.
Sourcepub fn from_cols_unchecked(
x_axis: Vec4,
y_axis: Vec4,
z_axis: Vec4,
w_axis: Vec4,
) -> Self
pub fn from_cols_unchecked( x_axis: Vec4, y_axis: Vec4, z_axis: Vec4, w_axis: Vec4, ) -> Self
Creates a symmetric 4x4 matrix from four column vectors.
Only the lower left triangle of the matrix is used. No check is performed to ensure that the given columns truly produce a symmetric matrix.
Sourcepub const fn from_cols_array_unchecked(m: &[f32; 16]) -> Self
pub const fn from_cols_array_unchecked(m: &[f32; 16]) -> Self
Creates a symmetric 4x4 matrix from an array stored in column major order.
Only the lower left triangle of the matrix is used. No check is performed to ensure that the given columns truly produce a symmetric matrix.
Sourcepub const fn to_cols_array(&self) -> [f32; 16]
pub const fn to_cols_array(&self) -> [f32; 16]
Creates an array storing data in column major order.
Sourcepub fn from_cols_array_2d_unchecked(m: &[[f32; 4]; 4]) -> Self
pub fn from_cols_array_2d_unchecked(m: &[[f32; 4]; 4]) -> Self
Creates a symmetric 4x4 matrix from a 2D array stored in column major order.
Only the lower left triangle of the matrix is used. No check is performed to ensure that the given columns truly produce a symmetric matrix.
Sourcepub const fn to_cols_array_2d(&self) -> [[f32; 4]; 4]
pub const fn to_cols_array_2d(&self) -> [[f32; 4]; 4]
Creates a 2D array storing data in column major order.
Sourcepub const fn from_cols_slice(slice: &[f32]) -> Self
pub const fn from_cols_slice(slice: &[f32]) -> Self
Creates a 4x4 matrix from the first 16 values in slice
.
Only the lower left triangle of the matrix is used. No check is performed to ensure that the given columns truly produce a symmetric matrix.
§Panics
Panics if slice
is less than 16 elements long.
Sourcepub fn from_diagonal(diagonal: Vec4) -> Self
pub fn from_diagonal(diagonal: Vec4) -> Self
Creates a symmetric 4x4 matrix with its diagonal set to diagonal
and all other entries set to 0.0
.
Sourcepub fn try_from_mat4(mat: Mat4) -> Result<Self, MatConversionError>
pub fn try_from_mat4(mat: Mat4) -> Result<Self, MatConversionError>
Tries to create a symmetric 4x4 matrix from a 4x4 matrix.
§Errors
Returns a MatConversionError
if the given matrix is not symmetric.
Sourcepub fn from_mat4_unchecked(mat: Mat4) -> Self
pub fn from_mat4_unchecked(mat: Mat4) -> Self
Creates a symmetric 4x4 matrix from a 4x4 matrix.
Only the lower left triangle of the matrix is used. No check is performed to ensure that the given matrix is truly symmetric.
Sourcepub const fn to_mat4(&self) -> Mat4
pub const fn to_mat4(&self) -> Mat4
Creates a 4x4 matrix from the symmetric 4x4 matrix in self
.
Sourcepub fn from_outer_product(v: Vec4) -> Self
pub fn from_outer_product(v: Vec4) -> Self
Creates a new symmetric 4x4 matrix from the outer product v * v^T
.
Sourcepub fn is_finite(&self) -> bool
pub fn is_finite(&self) -> bool
Returns true
if, and only if, all elements are finite.
If any element is either NaN
or positive or negative infinity, this will return false
.
Sourcepub fn determinant(&self) -> f32
pub fn determinant(&self) -> f32
Returns the determinant of self
.
Sourcepub fn inverse(&self) -> Self
pub fn inverse(&self) -> Self
Returns the inverse of self
.
If the matrix is not invertible the returned matrix will be invalid.
Sourcepub fn inverse_or_zero(&self) -> Self
pub fn inverse_or_zero(&self) -> Self
Returns the inverse of self
, or a zero matrix if the matrix is not invertible.
Sourcepub fn mul_symmetric_mat4(&self, rhs: &Self) -> Mat4
pub fn mul_symmetric_mat4(&self, rhs: &Self) -> Mat4
Multiplies two symmetric 4x4 matrices.
Sourcepub fn add_symmetric_mat4(&self, rhs: &Self) -> Self
pub fn add_symmetric_mat4(&self, rhs: &Self) -> Self
Adds two symmetric 4x4 matrices.
Sourcepub fn sub_symmetric_mat4(&self, rhs: &Self) -> Self
pub fn sub_symmetric_mat4(&self, rhs: &Self) -> Self
Subtracts two symmetric 4x4 matrices.
Sourcepub fn mul_scalar(&self, rhs: f32) -> Self
pub fn mul_scalar(&self, rhs: f32) -> Self
Multiplies a 4x4 matrix by a scalar.
Sourcepub fn div_scalar(&self, rhs: f32) -> Self
pub fn div_scalar(&self, rhs: f32) -> Self
Divides a 4x4 matrix by a scalar.
Source§impl SymmetricMat4
impl SymmetricMat4
Sourcepub fn as_symmetric_dmat4(&self) -> SymmetricDMat4
pub fn as_symmetric_dmat4(&self) -> SymmetricDMat4
Returns the double precision version of self
.
Trait Implementations§
Source§impl Add<&&SymmetricMat4> for &SymmetricMat4
impl Add<&&SymmetricMat4> for &SymmetricMat4
Source§impl Add<&Mat4> for &SymmetricMat4
impl Add<&Mat4> for &SymmetricMat4
Source§impl Add<&Mat4> for SymmetricMat4
impl Add<&Mat4> for SymmetricMat4
Source§impl Add<&SymmetricMat4> for &Mat4
impl Add<&SymmetricMat4> for &Mat4
Source§impl Add<&SymmetricMat4> for Mat4
impl Add<&SymmetricMat4> for Mat4
Source§impl Add<&SymmetricMat4> for SymmetricMat4
impl Add<&SymmetricMat4> for SymmetricMat4
Source§impl Add<Mat4> for &SymmetricMat4
impl Add<Mat4> for &SymmetricMat4
Source§impl Add<Mat4> for SymmetricMat4
impl Add<Mat4> for SymmetricMat4
Source§impl Add<SymmetricMat4> for Mat4
impl Add<SymmetricMat4> for Mat4
Source§impl Add for &SymmetricMat4
impl Add for &SymmetricMat4
Source§impl Add for SymmetricMat4
impl Add for SymmetricMat4
Source§impl AddAssign<&SymmetricMat4> for Mat4
impl AddAssign<&SymmetricMat4> for Mat4
Source§fn add_assign(&mut self, rhs: &SymmetricMat4)
fn add_assign(&mut self, rhs: &SymmetricMat4)
+=
operation. Read moreSource§impl AddAssign<&SymmetricMat4> for SymmetricMat4
impl AddAssign<&SymmetricMat4> for SymmetricMat4
Source§fn add_assign(&mut self, rhs: &Self)
fn add_assign(&mut self, rhs: &Self)
+=
operation. Read moreSource§impl AddAssign<SymmetricMat4> for Mat4
impl AddAssign<SymmetricMat4> for Mat4
Source§fn add_assign(&mut self, rhs: SymmetricMat4)
fn add_assign(&mut self, rhs: SymmetricMat4)
+=
operation. Read moreSource§impl AddAssign for SymmetricMat4
impl AddAssign for SymmetricMat4
Source§fn add_assign(&mut self, rhs: Self)
fn add_assign(&mut self, rhs: Self)
+=
operation. Read moreSource§impl Clone for SymmetricMat4
impl Clone for SymmetricMat4
Source§fn clone(&self) -> SymmetricMat4
fn clone(&self) -> SymmetricMat4
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for SymmetricMat4
impl Debug for SymmetricMat4
Source§impl Default for SymmetricMat4
impl Default for SymmetricMat4
Source§impl Display for SymmetricMat4
impl Display for SymmetricMat4
Source§impl Div<&SymmetricMat4> for &f32
impl Div<&SymmetricMat4> for &f32
Source§type Output = SymmetricMat4
type Output = SymmetricMat4
/
operator.Source§impl Div<&SymmetricMat4> for f32
impl Div<&SymmetricMat4> for f32
Source§type Output = SymmetricMat4
type Output = SymmetricMat4
/
operator.Source§impl Div<&f32> for &SymmetricMat4
impl Div<&f32> for &SymmetricMat4
Source§impl Div<&f32> for SymmetricMat4
impl Div<&f32> for SymmetricMat4
Source§impl Div<SymmetricMat4> for &f32
impl Div<SymmetricMat4> for &f32
Source§type Output = SymmetricMat4
type Output = SymmetricMat4
/
operator.Source§impl Div<SymmetricMat4> for f32
impl Div<SymmetricMat4> for f32
Source§type Output = SymmetricMat4
type Output = SymmetricMat4
/
operator.Source§impl Div<f32> for &SymmetricMat4
impl Div<f32> for &SymmetricMat4
Source§impl Div<f32> for SymmetricMat4
impl Div<f32> for SymmetricMat4
Source§impl DivAssign<&f32> for SymmetricMat4
impl DivAssign<&f32> for SymmetricMat4
Source§fn div_assign(&mut self, rhs: &f32)
fn div_assign(&mut self, rhs: &f32)
/=
operation. Read moreSource§impl DivAssign<f32> for SymmetricMat4
impl DivAssign<f32> for SymmetricMat4
Source§fn div_assign(&mut self, rhs: f32)
fn div_assign(&mut self, rhs: f32)
/=
operation. Read moreSource§impl From<SymmetricMat4> for Mat4
impl From<SymmetricMat4> for Mat4
Source§fn from(mat: SymmetricMat4) -> Self
fn from(mat: SymmetricMat4) -> Self
Source§impl Mul<&&SymmetricMat4> for &SymmetricMat4
impl Mul<&&SymmetricMat4> for &SymmetricMat4
Source§impl Mul<&Mat4> for &SymmetricMat4
impl Mul<&Mat4> for &SymmetricMat4
Source§impl Mul<&Mat4> for SymmetricMat4
impl Mul<&Mat4> for SymmetricMat4
Source§impl Mul<&SymmetricMat4> for &Mat4
impl Mul<&SymmetricMat4> for &Mat4
Source§impl Mul<&SymmetricMat4> for &f32
impl Mul<&SymmetricMat4> for &f32
Source§type Output = SymmetricMat4
type Output = SymmetricMat4
*
operator.Source§impl Mul<&SymmetricMat4> for Mat4
impl Mul<&SymmetricMat4> for Mat4
Source§impl Mul<&SymmetricMat4> for SymmetricMat4
impl Mul<&SymmetricMat4> for SymmetricMat4
Source§impl Mul<&SymmetricMat4> for f32
impl Mul<&SymmetricMat4> for f32
Source§type Output = SymmetricMat4
type Output = SymmetricMat4
*
operator.Source§impl Mul<&Vec4> for &SymmetricMat4
impl Mul<&Vec4> for &SymmetricMat4
Source§impl Mul<&Vec4> for SymmetricMat4
impl Mul<&Vec4> for SymmetricMat4
Source§impl Mul<&f32> for &SymmetricMat4
impl Mul<&f32> for &SymmetricMat4
Source§impl Mul<&f32> for SymmetricMat4
impl Mul<&f32> for SymmetricMat4
Source§impl Mul<Mat4> for &SymmetricMat4
impl Mul<Mat4> for &SymmetricMat4
Source§impl Mul<Mat4> for SymmetricMat4
impl Mul<Mat4> for SymmetricMat4
Source§impl Mul<SymmetricMat4> for &Mat4
impl Mul<SymmetricMat4> for &Mat4
Source§impl Mul<SymmetricMat4> for &f32
impl Mul<SymmetricMat4> for &f32
Source§type Output = SymmetricMat4
type Output = SymmetricMat4
*
operator.Source§impl Mul<SymmetricMat4> for Mat4
impl Mul<SymmetricMat4> for Mat4
Source§impl Mul<SymmetricMat4> for f32
impl Mul<SymmetricMat4> for f32
Source§type Output = SymmetricMat4
type Output = SymmetricMat4
*
operator.Source§impl Mul<Vec4> for &SymmetricMat4
impl Mul<Vec4> for &SymmetricMat4
Source§impl Mul<Vec4> for SymmetricMat4
impl Mul<Vec4> for SymmetricMat4
Source§impl Mul<f32> for &SymmetricMat4
impl Mul<f32> for &SymmetricMat4
Source§impl Mul<f32> for SymmetricMat4
impl Mul<f32> for SymmetricMat4
Source§impl Mul for &SymmetricMat4
impl Mul for &SymmetricMat4
Source§impl Mul for SymmetricMat4
impl Mul for SymmetricMat4
Source§impl MulAssign<&SymmetricMat4> for Mat4
impl MulAssign<&SymmetricMat4> for Mat4
Source§fn mul_assign(&mut self, rhs: &SymmetricMat4)
fn mul_assign(&mut self, rhs: &SymmetricMat4)
*=
operation. Read moreSource§impl MulAssign<&f32> for SymmetricMat4
impl MulAssign<&f32> for SymmetricMat4
Source§fn mul_assign(&mut self, rhs: &f32)
fn mul_assign(&mut self, rhs: &f32)
*=
operation. Read moreSource§impl MulAssign<SymmetricMat4> for Mat4
impl MulAssign<SymmetricMat4> for Mat4
Source§fn mul_assign(&mut self, rhs: SymmetricMat4)
fn mul_assign(&mut self, rhs: SymmetricMat4)
*=
operation. Read moreSource§impl MulAssign<f32> for SymmetricMat4
impl MulAssign<f32> for SymmetricMat4
Source§fn mul_assign(&mut self, rhs: f32)
fn mul_assign(&mut self, rhs: f32)
*=
operation. Read moreSource§impl Neg for &SymmetricMat4
impl Neg for &SymmetricMat4
Source§impl Neg for SymmetricMat4
impl Neg for SymmetricMat4
Source§impl PartialEq for SymmetricMat4
impl PartialEq for SymmetricMat4
Source§impl Sub<&&SymmetricMat4> for &SymmetricMat4
impl Sub<&&SymmetricMat4> for &SymmetricMat4
Source§impl Sub<&Mat4> for &SymmetricMat4
impl Sub<&Mat4> for &SymmetricMat4
Source§impl Sub<&Mat4> for SymmetricMat4
impl Sub<&Mat4> for SymmetricMat4
Source§impl Sub<&SymmetricMat4> for &Mat4
impl Sub<&SymmetricMat4> for &Mat4
Source§impl Sub<&SymmetricMat4> for Mat4
impl Sub<&SymmetricMat4> for Mat4
Source§impl Sub<&SymmetricMat4> for SymmetricMat4
impl Sub<&SymmetricMat4> for SymmetricMat4
Source§impl Sub<Mat4> for &SymmetricMat4
impl Sub<Mat4> for &SymmetricMat4
Source§impl Sub<Mat4> for SymmetricMat4
impl Sub<Mat4> for SymmetricMat4
Source§impl Sub<SymmetricMat4> for Mat4
impl Sub<SymmetricMat4> for Mat4
Source§impl Sub for &SymmetricMat4
impl Sub for &SymmetricMat4
Source§impl Sub for SymmetricMat4
impl Sub for SymmetricMat4
Source§impl SubAssign<&SymmetricMat4> for Mat4
impl SubAssign<&SymmetricMat4> for Mat4
Source§fn sub_assign(&mut self, rhs: &SymmetricMat4)
fn sub_assign(&mut self, rhs: &SymmetricMat4)
-=
operation. Read moreSource§impl SubAssign<&SymmetricMat4> for SymmetricMat4
impl SubAssign<&SymmetricMat4> for SymmetricMat4
Source§fn sub_assign(&mut self, rhs: &Self)
fn sub_assign(&mut self, rhs: &Self)
-=
operation. Read moreSource§impl SubAssign<SymmetricMat4> for Mat4
impl SubAssign<SymmetricMat4> for Mat4
Source§fn sub_assign(&mut self, rhs: SymmetricMat4)
fn sub_assign(&mut self, rhs: SymmetricMat4)
-=
operation. Read moreSource§impl SubAssign for SymmetricMat4
impl SubAssign for SymmetricMat4
Source§fn sub_assign(&mut self, rhs: Self)
fn sub_assign(&mut self, rhs: Self)
-=
operation. Read moreSource§impl<'a> Sum<&'a SymmetricMat4> for SymmetricMat4
impl<'a> Sum<&'a SymmetricMat4> for SymmetricMat4
Source§fn sum<I: Iterator<Item = &'a SymmetricMat4>>(iter: I) -> Self
fn sum<I: Iterator<Item = &'a SymmetricMat4>>(iter: I) -> Self
Self
from the elements by “summing up”
the items.Source§impl Sum for SymmetricMat4
impl Sum for SymmetricMat4
Source§fn sum<I: Iterator<Item = SymmetricMat4>>(iter: I) -> Self
fn sum<I: Iterator<Item = SymmetricMat4>>(iter: I) -> Self
Self
from the elements by “summing up”
the items.