Skip to main content

rapier2d/utils/
matrix_column.rs

1//! MatrixColumn trait for matrix column access.
2
3use crate::math::{Matrix, Vector};
4use na::Scalar;
5
6/// Extension trait for matrix column access (like nalgebra's `.column()`)
7pub trait MatrixColumn {
8    /// The column type returned by `column()`.
9    type Column;
10    /// Returns the i-th column of this matrix.
11    fn column(&self, i: usize) -> Self::Column;
12}
13
14impl<T: Copy> MatrixColumn for [T; 2] {
15    type Column = T;
16    fn column(&self, i: usize) -> Self::Column {
17        self[i]
18    }
19}
20
21impl MatrixColumn for Matrix {
22    type Column = Vector;
23    #[inline]
24    fn column(&self, i: usize) -> Self::Column {
25        self.col(i)
26    }
27}
28
29impl<T: Scalar> MatrixColumn for na::Matrix3<T> {
30    type Column = na::Vector3<T>;
31    #[inline]
32    fn column(&self, i: usize) -> Self::Column {
33        self.column(i).into_owned()
34    }
35}
36
37impl<T: Scalar> MatrixColumn for na::Matrix2<T> {
38    type Column = na::Vector2<T>;
39    #[inline]
40    fn column(&self, i: usize) -> Self::Column {
41        self.column(i).into_owned()
42    }
43}