use crate::base::Rotation;
#[derive(Debug, Copy, Clone, PartialEq)]
pub enum RotationType {
Rotation1, Rotation2, Rotation3, Rotation4, Rotation6, RotoInversion1, RotoInversion2, RotoInversion3, RotoInversion4, RotoInversion6, }
pub fn identify_rotation_type(rotation: &Rotation) -> RotationType {
let tr = rotation.trace();
let det = rotation.map(|e| e as f64).determinant().round() as i32;
match (tr, det) {
(3, 1) => RotationType::Rotation1,
(-1, 1) => RotationType::Rotation2,
(0, 1) => RotationType::Rotation3,
(1, 1) => RotationType::Rotation4,
(2, 1) => RotationType::Rotation6,
(-3, -1) => RotationType::RotoInversion1,
(1, -1) => RotationType::RotoInversion2,
(0, -1) => RotationType::RotoInversion3,
(-1, -1) => RotationType::RotoInversion4,
(-2, -1) => RotationType::RotoInversion6,
_ => unreachable!("Unknown rotation type"),
}
}