use super::Matrix;
pub enum Axis {
X,
Y,
Z,
}
pub fn rotation_matrix_cw(angle: f64, axis: Axis) -> Matrix {
let data = match axis {
Axis::X => [
1.,
0.,
0.,
0.,
angle.cos(),
angle.sin(),
0.,
-angle.sin(),
angle.cos(),
],
Axis::Y => [
angle.cos(),
0.,
-angle.sin(),
0.,
1.,
0.,
angle.sin(),
0.,
angle.cos(),
],
Axis::Z => [
angle.cos(),
angle.sin(),
0.,
-angle.sin(),
angle.cos(),
0.,
0.,
0.,
1.,
],
};
Matrix::new(data, 3, 3)
}
pub fn rotation_matrix_ccw(angle: f64, axis: Axis) -> Matrix {
let data = match axis {
Axis::X => [
1.,
0.,
0.,
0.,
angle.cos(),
-angle.sin(),
0.,
angle.sin(),
angle.cos(),
],
Axis::Y => [
angle.cos(),
0.,
angle.sin(),
0.,
1.,
0.,
-angle.sin(),
0.,
angle.cos(),
],
Axis::Z => [
angle.cos(),
-angle.sin(),
0.,
angle.sin(),
angle.cos(),
0.,
0.,
0.,
1.,
],
};
Matrix::new(data, 3, 3)
}