constructor/index methods for Matrix2x2 and Matrix3x3

This commit is contained in:
Bill Thiede 2021-06-29 20:48:41 -07:00
parent 72b15e5516
commit ec0331b88b

View File

@ -8,6 +8,38 @@ pub struct Matrix4x4 {
m: [[f32; 4]; 4],
}
pub struct Matrix2x2 {
m: [[f32; 2]; 2],
}
impl Matrix2x2 {
/// Create a `Matrix2x2` with each of the given rows.
pub fn new(r0: [f32; 2], r1: [f32; 2]) -> Matrix2x2 {
Matrix2x2 { m: [r0, r1] }
}
}
impl Index<(usize, usize)> for Matrix2x2 {
type Output = f32;
fn index(&self, (row, col): (usize, usize)) -> &Self::Output {
&self.m[row][col]
}
}
pub struct Matrix3x3 {
m: [[f32; 3]; 3],
}
impl Matrix3x3 {
/// Create a `Matrix3x2` with each of the given rows.
pub fn new(r0: [f32; 3], r1: [f32; 3], r2: [f32; 3]) -> Matrix3x3 {
Matrix3x3 { m: [r0, r1, r2] }
}
}
impl Index<(usize, usize)> for Matrix3x3 {
type Output = f32;
fn index(&self, (row, col): (usize, usize)) -> &Self::Output {
&self.m[row][col]
}
}
impl From<[f32; 16]> for Matrix4x4 {
fn from(t: [f32; 16]) -> Self {
Matrix4x4 {
@ -241,6 +273,23 @@ impl Index<(usize, usize)> for Matrix4x4 {
mod tests {
use super::*;
#[test]
fn construct2x2() {
let m = Matrix2x2::new([-3., 5.], [1., -2.]);
assert_eq!(m[(0, 0)], -3.);
assert_eq!(m[(0, 1)], 5.);
assert_eq!(m[(1, 0)], 1.);
assert_eq!(m[(1, 1)], -2.);
}
#[test]
fn construct3x3() {
let m = Matrix3x3::new([-3., 5., 0.], [1., -2., -7.], [0., 1., 1.]);
assert_eq!(m[(0, 0)], -3.);
assert_eq!(m[(1, 1)], -2.);
assert_eq!(m[(2, 2)], 1.);
}
#[test]
fn construct4x4() {
let m = Matrix4x4::new(