pub struct Matrix<T: Copy + NumAssign, const R: usize, const C: usize>(/* private fields */);
Expand description
A column-major numeric matrix.
Implementations§
source§impl<T: Copy + NumAssign, const R: usize, const C: usize> Matrix<T, R, C>
impl<T: Copy + NumAssign, const R: usize, const C: usize> Matrix<T, R, C>
sourcepub fn new(data: [[T; R]; C]) -> Self
pub fn new(data: [[T; R]; C]) -> Self
Creates a matrix from raw 2D array.
§Examples
let m = Matrix::<f32, 2, 2>::new([[1., 2.], [3., 4.]]);
assert_eq!(*m.as_ref(), [1., 2., 3., 4.]);
sourcepub fn from_slice(data: &[T]) -> Self
pub fn from_slice(data: &[T]) -> Self
Creates a matrix from slice.
§Examples
let m = Matrix::<f32, 2, 2>::from_slice(&[1., 2., 3., 4.]);
assert_eq!(*m.as_ref(), [1., 2., 3., 4.]);
source§impl<T: Copy + NumAssign, const R: usize, const C: usize> Matrix<T, R, C>
impl<T: Copy + NumAssign, const R: usize, const C: usize> Matrix<T, R, C>
sourcepub fn mul_assign<const N: usize>(
&mut self,
lhs: Matrix<T, R, N>,
rhs: Matrix<T, N, C>
)
pub fn mul_assign<const N: usize>( &mut self, lhs: Matrix<T, R, N>, rhs: Matrix<T, N, C> )
Multiplies 2 matrices and stores the result into self.
§Examples
let (m1, m2) = (Matrix::<i32, 3, 2>::from_slice(&[1, 2, 3, 4, 5, 6]), Matrix::<i32, 2, 1>::from_slice(&[7, 8]));
let mut result = Matrix::<i32, 3, 1>::default();
result.mul_assign(m1, m2);
assert_eq!(*result.as_ref(), [39, 54, 69]);
source§impl<T: Copy + NumAssign, const N: usize> Matrix<T, N, N>
impl<T: Copy + NumAssign, const N: usize> Matrix<T, N, N>
sourcepub fn transpose(&mut self)
pub fn transpose(&mut self)
Transpose the Matrix
.
§Examples
let mut m = Matrix::<i32, 3, 3>::from_slice(&[1, 2, 3, 4, 5, 6, 7, 8, 9]);
m.transpose();
assert_eq!(*m.as_ref(), [1, 4, 7, 2, 5, 8, 3, 6, 9]);
sourcepub fn transposed(&self) -> Self
pub fn transposed(&self) -> Self
Returns the Matrix
transposed.
§Examples
let mut m = Matrix::<i32, 3, 3>::from_slice(&[1, 2, 3, 4, 5, 6, 7, 8, 9]);
assert_eq!(*m.transposed().as_ref(), [1, 4, 7, 2, 5, 8, 3, 6, 9]);
source§impl<T: Copy + NumAssign, const N: usize> Matrix<T, N, 1>
impl<T: Copy + NumAssign, const N: usize> Matrix<T, N, 1>
sourcepub fn dot(&self, rhs: Self) -> T
pub fn dot(&self, rhs: Self) -> T
Calculates the dot product of 2 column matrices aka vectors.
§Examples
let (v1, v2) = (Matrix::<i32, 3, 1>::from_slice(&[1, 2, 3]), Matrix::<i32, 3, 1>::from_slice(&[4, 5, 6]));
assert_eq!(v1.dot(v2), 32);
source§impl<T: Copy + FloatOps + NumAssign, const N: usize> Matrix<T, N, 1>
impl<T: Copy + FloatOps + NumAssign, const N: usize> Matrix<T, N, 1>
sourcepub fn len(&self) -> T
pub fn len(&self) -> T
Calculates the length of a column matrix aka vector.
§Examples
assert_eq!(Matrix::<f32, 3, 1>::from_slice(&[3., 4., 12.]).len(), 13.);
sourcepub fn normalize(&mut self) -> bool
pub fn normalize(&mut self) -> bool
Normizalizes this column matrix aka vector.
§Examples
let mut v = Matrix::<f32, 2, 1>::from_slice(&[3., 4.]);
assert!(v.normalize());
assert_eq!(*v.as_ref(), [0.6, 0.8]);
sourcepub fn normalized(&self) -> Option<Self>
pub fn normalized(&self) -> Option<Self>
Returns a normalized version of this vector.
§Examples
let mut v = Matrix::<f32, 2, 1>::from_slice(&[3., 4.]);
assert_eq!(v.normalized().unwrap().as_ref(), [0.6, 0.8]);
source§impl<T: Copy + NumAssign, const R: usize> Matrix<T, R, 1>
impl<T: Copy + NumAssign, const R: usize> Matrix<T, R, 1>
sourcepub fn from_array(arr: [T; R]) -> Self
pub fn from_array(arr: [T; R]) -> Self
Creates a vector from raw array.
§Examples
let v = Vector::<f32, 4>::from_array([1., 2., 3., 4.]);
assert_eq!(*v.as_ref(), [1., 2., 3., 4.]);
source§impl<T: Copy + NumAssign> Matrix<T, 3, 1>
impl<T: Copy + NumAssign> Matrix<T, 3, 1>
source§impl<T: Copy + NumAssign> Matrix<T, 4, 1>
impl<T: Copy + NumAssign> Matrix<T, 4, 1>
sourcepub fn from_vec3(v: Vec3<T>, w: T) -> Self
pub fn from_vec3(v: Vec3<T>, w: T) -> Self
Creates a new Vec4
from a Vec3
and w component.
§Examples
let v = Vec3::<i32>::from_slice(&[2, 3, 4]);
assert_eq!(*Vec4::<i32>::from_vec3(v, 1).as_ref(), [2, 3, 4, 1]);
source§impl<T: Copy + NumAssign> Matrix<T, 2, 2>
impl<T: Copy + NumAssign> Matrix<T, 2, 2>
source§impl<T: Copy + NumAssign> Matrix<T, 3, 3>
impl<T: Copy + NumAssign> Matrix<T, 3, 3>
sourcepub fn det(&self) -> T
pub fn det(&self) -> T
Calculates the determinant of this matrix.
§Examples
let m = Mat3::<i32>::from_slice(&[1, 0, 5, 2, 1, 6, 3, 4, 0]);
assert_eq!(m.det(), 1);
sourcepub fn invert(&mut self) -> bool
pub fn invert(&mut self) -> bool
Invert this matrix. If this matrix is not invertible, this method returns false and the matrix is unchanged. For formula, see: https://en.wikipedia.org/wiki/Invertible_matrix#Inversion_of_3_%C3%97_3_matrices
§Examples
let mut m = <Mat3>::from_slice(&[1., 0., 5., 2., 1., 6., 3., 4., 0.]);
assert!(m.invert());
assert_eq!(*m.as_ref(), [-24., 20., -5., 18., -15., 4., 5., -4., 1.]);
let mut m2 = <Mat3>::from_slice(&[1., 0., 1., 0., 1., 0., 0., 0., 0.]);
assert!(!m2.invert());
assert_eq!(*m2.as_ref(), [1., 0., 1., 0., 1., 0., 0., 0., 0.]);
sourcepub fn normal_matrix(&mut self) -> bool
pub fn normal_matrix(&mut self) -> bool
Transforms this matrix into a normal matrix, which is the inverse transpose of itself. If this matrix is not invertible, this method returns false and the matrix is unchanged.
§Examples
let mut m = <Mat3>::from_slice(&[0., 0., 1., 1., 0., 0., 0., 1., 0.]);
assert!(m.normal_matrix());
assert_eq!(*m.as_ref(), [0., 0., 1., 1., 0., 0., 0., 1., 0.]);
source§impl<T: Copy + NumAssign> Matrix<T, 4, 4>
impl<T: Copy + NumAssign> Matrix<T, 4, 4>
sourcepub fn det(&self) -> T
pub fn det(&self) -> T
Calculates the determinant of this matrix.
§Examples
let m = Mat4::<i32>::from_slice(&[1, 1, 1, -1, 1, 1, -1, 1, 1, -1, 1, 1, -1, 1, 1, 1]);
assert_eq!(m.det(), -16);
sourcepub fn invert(&mut self) -> bool
pub fn invert(&mut self) -> bool
Invert this matrix. If this matrix is not invertible, this method returns false and the matrix is unchanged.
§Examples
let mut m = <Mat4>::from_slice(&[1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., 1.]);
assert!(m.invert());
assert_eq!(*m.as_ref(), [0.25, 0.25, 0.25, -0.25, 0.25, 0.25, -0.25, 0.25, 0.25, -0.25, 0.25, 0.25, -0.25, 0.25, 0.25, 0.25]);
Trait Implementations§
source§impl<T: Copy + NumAssign, const R: usize, const C: usize> AddAssign for Matrix<T, R, C>
impl<T: Copy + NumAssign, const R: usize, const C: usize> AddAssign for Matrix<T, R, C>
source§fn add_assign(&mut self, rhs: Matrix<T, R, C>)
fn add_assign(&mut self, rhs: Matrix<T, R, C>)
+=
operation. Read moresource§impl<'de, T, const R: usize, const C: usize> Deserialize<'de> for Matrix<T, R, C>
impl<'de, T, const R: usize, const C: usize> Deserialize<'de> for Matrix<T, R, C>
source§fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error>
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error>
source§impl<T: Copy + NumAssign, const R: usize, const C: usize> DivAssign<T> for Matrix<T, R, C>
impl<T: Copy + NumAssign, const R: usize, const C: usize> DivAssign<T> for Matrix<T, R, C>
source§fn div_assign(&mut self, rhs: T)
fn div_assign(&mut self, rhs: T)
/=
operation. Read moresource§impl<T: Copy + FloatEq<T> + NumAssign, const R: usize, const C: usize> FloatEq<T> for Matrix<T, R, C>
impl<T: Copy + FloatEq<T> + NumAssign, const R: usize, const C: usize> FloatEq<T> for Matrix<T, R, C>
source§impl<T: Copy + NumAssign, const R: usize, const C: usize> From<[[T; R]; C]> for Matrix<T, R, C>
impl<T: Copy + NumAssign, const R: usize, const C: usize> From<[[T; R]; C]> for Matrix<T, R, C>
source§impl<T: Copy + NumAssign> From<Matrix<T, 3, 3>> for Mat4<T>
impl<T: Copy + NumAssign> From<Matrix<T, 3, 3>> for Mat4<T>
source§fn from(m: Mat3<T>) -> Self
fn from(m: Mat3<T>) -> Self
Augments a Mat3
into a Mat4
The resulting Mat4
contains the given Mat3
on upper-left with the lower-right element = 1.
§Examples
let m = Mat4::from(Mat3::<i32>::from_slice(&[2, 3, 4, 5, 6, 7, 8, 9, 10]));
assert_eq!(*m.as_ref(), [2, 3, 4, 0, 5, 6, 7, 0, 8, 9, 10, 0, 0, 0, 0, 1]);
source§impl<T: Copy + NumAssign, const R: usize, const C: usize> From<Matrix<T, R, C>> for [[T; R]; C]
impl<T: Copy + NumAssign, const R: usize, const C: usize> From<Matrix<T, R, C>> for [[T; R]; C]
source§impl<T: Copy + NumAssign, const R: usize, const C: usize> Index<(usize, usize)> for Matrix<T, R, C>
impl<T: Copy + NumAssign, const R: usize, const C: usize> Index<(usize, usize)> for Matrix<T, R, C>
source§impl<T: Copy + NumAssign, const R: usize, const C: usize> IndexMut<(usize, usize)> for Matrix<T, R, C>
impl<T: Copy + NumAssign, const R: usize, const C: usize> IndexMut<(usize, usize)> for Matrix<T, R, C>
source§impl<T: Copy + NumAssign, const R: usize, const C: usize> IndexMut<usize> for Matrix<T, R, C>
impl<T: Copy + NumAssign, const R: usize, const C: usize> IndexMut<usize> for Matrix<T, R, C>
source§impl<T: Copy + NumAssign, const R: usize, const N: usize, const C: usize> Mul<Matrix<T, N, C>> for Matrix<T, R, N>
impl<T: Copy + NumAssign, const R: usize, const N: usize, const C: usize> Mul<Matrix<T, N, C>> for Matrix<T, R, N>
source§impl<T: Copy + NumAssign, const R: usize, const C: usize> MulAssign<T> for Matrix<T, R, C>
impl<T: Copy + NumAssign, const R: usize, const C: usize> MulAssign<T> for Matrix<T, R, C>
source§fn mul_assign(&mut self, rhs: T)
fn mul_assign(&mut self, rhs: T)
*=
operation. Read moresource§impl<T: Copy + NumAssign, const N: usize> MulAssign for Matrix<T, N, N>
impl<T: Copy + NumAssign, const N: usize> MulAssign for Matrix<T, N, N>
source§fn mul_assign(&mut self, rhs: Matrix<T, N, N>)
fn mul_assign(&mut self, rhs: Matrix<T, N, N>)
*=
operation. Read moresource§impl<T: PartialEq + Copy + NumAssign, const R: usize, const C: usize> PartialEq for Matrix<T, R, C>
impl<T: PartialEq + Copy + NumAssign, const R: usize, const C: usize> PartialEq for Matrix<T, R, C>
source§impl<T: Copy + NumAssign, const R: usize, const C: usize> RemAssign<T> for Matrix<T, R, C>
impl<T: Copy + NumAssign, const R: usize, const C: usize> RemAssign<T> for Matrix<T, R, C>
source§fn rem_assign(&mut self, rhs: T)
fn rem_assign(&mut self, rhs: T)
%=
operation. Read moresource§impl<T: Copy + NumAssign, const R: usize, const C: usize> SubAssign for Matrix<T, R, C>
impl<T: Copy + NumAssign, const R: usize, const C: usize> SubAssign for Matrix<T, R, C>
source§fn sub_assign(&mut self, rhs: Matrix<T, R, C>)
fn sub_assign(&mut self, rhs: Matrix<T, R, C>)
-=
operation. Read more