implement submatrix for matrix4x4
This commit is contained in:
parent
43d95041af
commit
a69e404817
@ -64,8 +64,8 @@ impl Matrix3x3 {
|
|||||||
/// );
|
/// );
|
||||||
/// ```
|
/// ```
|
||||||
pub fn submatrix(&self, row: usize, col: usize) -> Matrix2x2 {
|
pub fn submatrix(&self, row: usize, col: usize) -> Matrix2x2 {
|
||||||
assert!(0 <= row && row < 3);
|
assert!(row < 3);
|
||||||
assert!(0 <= col && col < 3);
|
assert!(col < 3);
|
||||||
let mut rows = vec![];
|
let mut rows = vec![];
|
||||||
for r in 0..3 {
|
for r in 0..3 {
|
||||||
if r != row {
|
if r != row {
|
||||||
@ -262,6 +262,45 @@ impl Matrix4x4 {
|
|||||||
}
|
}
|
||||||
Matrix4x4 { m: minv }
|
Matrix4x4 { m: minv }
|
||||||
}
|
}
|
||||||
|
/// submatrix extracts a 3x3 matrix ignoring the 0-based `row` and `col` given.
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
/// ```
|
||||||
|
/// use rtchallenge::matrices::{Matrix3x3, Matrix4x4};
|
||||||
|
///
|
||||||
|
/// assert_eq!(
|
||||||
|
/// Matrix4x4::new(
|
||||||
|
/// [-6., 1., 1., 6.],
|
||||||
|
/// [-8., 5., 8., 6.],
|
||||||
|
/// [-1., 0., 8., 2.],
|
||||||
|
/// [-7., 1., -1., 1.],
|
||||||
|
/// )
|
||||||
|
/// .submatrix(2, 1),
|
||||||
|
/// Matrix3x3::new([-6., 1., 6.], [-8., 8., 6.], [-7., -1., 1.],)
|
||||||
|
/// );
|
||||||
|
/// ```
|
||||||
|
pub fn submatrix(&self, row: usize, col: usize) -> Matrix3x3 {
|
||||||
|
assert!(row < 4);
|
||||||
|
assert!(col < 4);
|
||||||
|
let mut rows = vec![];
|
||||||
|
for r in 0..4 {
|
||||||
|
if r != row {
|
||||||
|
let mut v = vec![];
|
||||||
|
for c in 0..4 {
|
||||||
|
if c != col {
|
||||||
|
v.push(self[(r, c)]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rows.push(v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let m = [
|
||||||
|
[rows[0][0], rows[0][1], rows[0][2]],
|
||||||
|
[rows[1][0], rows[1][1], rows[1][2]],
|
||||||
|
[rows[2][0], rows[2][1], rows[2][2]],
|
||||||
|
];
|
||||||
|
Matrix3x3 { m }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl fmt::Debug for Matrix4x4 {
|
impl fmt::Debug for Matrix4x4 {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user