vanrijn/src/math/mat2.rs

36 lines
946 B
Rust

use super::Float;
#[derive(PartialEq, Debug, Copy, Clone)]
pub struct Mat2<T: Float> {
pub elements: [[T; 2]; 2],
}
impl<T: Float> Mat2<T> {
pub fn new(m00: T, m01: T, m10: T, m11: T) -> Mat2<T> {
Mat2 {
elements: [[m00, m01], [m10, m11]],
}
}
pub fn determinant(&self) -> T {
self.elements[0][0] * self.elements[1][1] - self.elements[0][1] * self.elements[1][0]
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn determinant_returns_expected_value() {
let target1 = Mat2::new(1.0, 2.0, 3.0, 4.0);
let target2 = Mat2::new(1.0, -2.0, 3.0, 4.0);
let target3 = Mat2::new(1.0, 1.0, 1.0, 1.0);
let target4 = Mat2::new(21.0, 45.0, -16.0, 0.0);
assert!(target1.determinant() == -2.0);
assert!(target2.determinant() == 10.0);
assert!(target3.determinant() == 0.0);
assert!(target4.determinant() == 720.0);
}
}