Trait cgmath::Matrix

source ·
pub trait Matrix: VectorSpacewhere
    Self::Scalar: BaseFloat,
    Self: Index<usize, Output = Self::Column> + IndexMut<usize, Output = Self::Column> + ApproxEq<Epsilon = <Self as VectorSpace>::Scalar>,{
    type Row: VectorSpace<Scalar = Self::Scalar> + Array<Element = Self::Scalar>;
    type Column: VectorSpace<Scalar = Self::Scalar> + Array<Element = Self::Scalar>;
    type Transpose: Matrix<Scalar = Self::Scalar, Row = Self::Column, Column = Self::Row>;

    // Required methods
    fn row(&self, r: usize) -> Self::Row;
    fn swap_rows(&mut self, a: usize, b: usize);
    fn swap_columns(&mut self, a: usize, b: usize);
    fn swap_elements(&mut self, a: (usize, usize), b: (usize, usize));
    fn transpose(&self) -> Self::Transpose;

    // Provided methods
    fn as_ptr(&self) -> *const Self::Scalar { ... }
    fn as_mut_ptr(&mut self) -> *mut Self::Scalar { ... }
    fn replace_col(&mut self, c: usize, src: Self::Column) -> Self::Column { ... }
}
Expand description

A column-major matrix of arbitrary dimensions.

Because this is constrained to the VectorSpace trait, this means that following operators are required to be implemented:

Matrix addition:

  • Add<Output = Self>
  • Sub<Output = Self>
  • Neg<Output = Self>

Scalar multiplication:

  • Mul<Self::Scalar, Output = Self>
  • Div<Self::Scalar, Output = Self>
  • Rem<Self::Scalar, Output = Self>

Note that matrix multiplication is not required for implementors of this trait. This is due to the complexities of implementing these operators with Rust’s current type system. For the multiplication of square matrices, see SquareMatrix.

Required Associated Types§

source

type Row: VectorSpace<Scalar = Self::Scalar> + Array<Element = Self::Scalar>

The row vector of the matrix.

source

type Column: VectorSpace<Scalar = Self::Scalar> + Array<Element = Self::Scalar>

The column vector of the matrix.

source

type Transpose: Matrix<Scalar = Self::Scalar, Row = Self::Column, Column = Self::Row>

The result of transposing the matrix

Required Methods§

source

fn row(&self, r: usize) -> Self::Row

Get a row from this matrix by-value.

source

fn swap_rows(&mut self, a: usize, b: usize)

Swap two rows of this array.

source

fn swap_columns(&mut self, a: usize, b: usize)

Swap two columns of this array.

source

fn swap_elements(&mut self, a: (usize, usize), b: (usize, usize))

Swap the values at index a and b

source

fn transpose(&self) -> Self::Transpose

Transpose this matrix, returning a new matrix.

Provided Methods§

source

fn as_ptr(&self) -> *const Self::Scalar

Get the pointer to the first element of the array.

source

fn as_mut_ptr(&mut self) -> *mut Self::Scalar

Get a mutable pointer to the first element of the array.

source

fn replace_col(&mut self, c: usize, src: Self::Column) -> Self::Column

Replace a column in the array.

Implementors§

source§

impl<S: BaseFloat> Matrix for Matrix2<S>

§

type Column = Vector2<S>

§

type Row = Vector2<S>

§

type Transpose = Matrix2<S>

source§

impl<S: BaseFloat> Matrix for Matrix3<S>

§

type Column = Vector3<S>

§

type Row = Vector3<S>

§

type Transpose = Matrix3<S>

source§

impl<S: BaseFloat> Matrix for Matrix4<S>

§

type Column = Vector4<S>

§

type Row = Vector4<S>

§

type Transpose = Matrix4<S>