matrix/
vec2.rs

1use crate::{Matrix, Vector};
2
3macro_rules! M {
4    ($values:expr) => {
5        &Matrix::from($values)
6    };
7}
8
9macro_rules! size {
10    ($vec:expr) => {
11        assert!($vec.size() == 2, "vector must be of size 2");
12    };
13}
14
15pub fn scale2(v: &Vector<f32>, dx: f32, dy: f32) -> Vector<f32> {
16    size!(v);
17    M!([[dx, 0.], [0., dy]]) * v
18}
19
20pub fn shear2x(v: &Vector<f32>, s: f32) -> Vector<f32> {
21    size!(v);
22    M!([[1., s], [0., 1.]]) * v
23}
24
25pub fn shear2y(v: &Vector<f32>, s: f32) -> Vector<f32> {
26    size!(v);
27    M!([[1., 0.], [s, 1.]]) * v
28}
29
30pub fn rotate2(v: &Vector<f32>, deg: f32) -> Vector<f32> {
31    size!(v);
32    M!([[deg.cos(), -deg.sin()], [deg.sin(), deg.cos()]]) * v
33}
34
35pub fn reflect2x(v: &Vector<f32>) -> Vector<f32> {
36    size!(v);
37    M!([[1., 0.], [0., -1.]]) * v
38}
39
40pub fn reflect2y(v: &Vector<f32>) -> Vector<f32> {
41    size!(v);
42    M!([[-1., 0.], [0., 1.]]) * v
43}