matrix/
vec3.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() == 3, "vector must be of size 3");
12    };
13}
14
15pub fn scale3(v: &Vector<f32>, dx: f32, dy: f32, dz: f32) -> Vector<f32> {
16    size!(v);
17    M!([[dx, 0., 0.], [0., dy, 0.], [0., 0., dz]]) * v
18}
19
20pub fn rotate3x(v: &Vector<f32>, deg: f32) -> Vector<f32> {
21    size!(v);
22    M!([
23        [1., 0., 0.],
24        [0., deg.cos(), -deg.sin()],
25        [0., deg.sin(), deg.cos()]
26    ]) * v
27}
28
29pub fn rotate3y(v: &Vector<f32>, deg: f32) -> Vector<f32> {
30    size!(v);
31    M!([
32        [deg.cos(), 0., deg.sin()],
33        [0., 1., 0.],
34        [-deg.sin(), 0., deg.cos()]
35    ]) * v
36}
37
38pub fn rotate3z(v: &Vector<f32>, deg: f32) -> Vector<f32> {
39    size!(v);
40    M!([
41        [deg.cos(), -deg.sin(), 0.],
42        [deg.sin(), deg.cos(), 0.],
43        [0., 0., 1.]
44    ]) * v
45}