pub trait SquareMatrixwhere
Self::Scalar: Float,
Self: One + Product<Self> + Matrix<Column = Self::ColumnRow, Row = Self::ColumnRow, Transpose = Self> + Mul<Self::ColumnRow, Output = Self::ColumnRow> + Mul<Self, Output = Self>,{
type ColumnRow: VectorSpace<Scalar = Self::Scalar> + Array<Element = Self::Scalar>;
// Required methods
fn from_value(value: Self::Scalar) -> Self;
fn from_diagonal(diagonal: Self::ColumnRow) -> Self;
fn transpose_self(&mut self);
fn determinant(&self) -> Self::Scalar;
fn diagonal(&self) -> Self::ColumnRow;
fn invert(&self) -> Option<Self>;
fn is_diagonal(&self) -> bool;
fn is_symmetric(&self) -> bool;
// Provided methods
fn identity() -> Self { ... }
fn trace(&self) -> Self::Scalar { ... }
fn is_invertible(&self) -> bool
where Self::Scalar: UlpsEq { ... }
fn is_identity(&self) -> bool
where Self: UlpsEq { ... }
}
Expand description
A column-major major matrix where the rows and column vectors are of the same dimensions.
Required Associated Types§
Sourcetype ColumnRow: VectorSpace<Scalar = Self::Scalar> + Array<Element = Self::Scalar>
type ColumnRow: VectorSpace<Scalar = Self::Scalar> + Array<Element = Self::Scalar>
The row/column vector of the matrix.
This is used to constrain the column and rows to be of the same type in lieu of equality
constraints being implemented for where
clauses. Once those are added, this type will
likely go away.
Required Methods§
Sourcefn from_value(value: Self::Scalar) -> Self
fn from_value(value: Self::Scalar) -> Self
Create a new diagonal matrix using the supplied value.
Sourcefn from_diagonal(diagonal: Self::ColumnRow) -> Self
fn from_diagonal(diagonal: Self::ColumnRow) -> Self
Create a matrix from a non-uniform scale
Sourcefn transpose_self(&mut self)
fn transpose_self(&mut self)
Transpose this matrix in-place.
Sourcefn determinant(&self) -> Self::Scalar
fn determinant(&self) -> Self::Scalar
Take the determinant of this matrix.
Sourcefn invert(&self) -> Option<Self>
fn invert(&self) -> Option<Self>
Invert this matrix, returning a new matrix. m.mul_m(m.invert())
is
the identity matrix. Returns None
if this matrix is not invertible
(has a determinant of zero).
Sourcefn is_diagonal(&self) -> bool
fn is_diagonal(&self) -> bool
Test if this is a diagonal matrix. That is, every element outside of the diagonal is 0.
Sourcefn is_symmetric(&self) -> bool
fn is_symmetric(&self) -> bool
Test if this matrix is symmetric. That is, it is equal to its transpose.
Provided Methods§
Sourcefn identity() -> Self
fn identity() -> Self
The identity matrix. Multiplying this matrix with another should have no effect.
Note that this is exactly the same as One::one
. The term ‘identity
matrix’ is more common though, so we provide this method as an
alternative.
Sourcefn trace(&self) -> Self::Scalar
fn trace(&self) -> Self::Scalar
Return the trace of this matrix. That is, the sum of the diagonal.
Sourcefn is_invertible(&self) -> bool
fn is_invertible(&self) -> bool
Test if this matrix is invertible.
Sourcefn is_identity(&self) -> boolwhere
Self: UlpsEq,
fn is_identity(&self) -> boolwhere
Self: UlpsEq,
Test if this matrix is the identity matrix. That is, it is diagonal and every element in the diagonal is one.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.