use num::{One, Zero}; use simba::scalar::{ClosedAdd, ClosedMul, SupersetOf}; use crate::base::{SMatrix, Scalar}; use crate::geometry::Rotation; impl Default for Rotation where T: Scalar + Zero + One, { fn default() -> Self { Self::identity() } } /// # Identity impl Rotation where T: Scalar + Zero + One, { /// Creates a new square identity rotation of the given `dimension`. /// /// # Example /// ``` /// # use nalgebra::{Rotation2, Rotation3}; /// # use nalgebra::Vector3; /// let rot1 = Rotation2::identity(); /// let rot2 = Rotation2::new(std::f32::consts::FRAC_PI_2); /// /// assert_eq!(rot1 * rot2, rot2); /// assert_eq!(rot2 * rot1, rot2); /// /// let rot1 = Rotation3::identity(); /// let rot2 = Rotation3::from_axis_angle(&Vector3::z_axis(), std::f32::consts::FRAC_PI_2); /// /// assert_eq!(rot1 * rot2, rot2); /// assert_eq!(rot2 * rot1, rot2); /// ``` #[inline] pub fn identity() -> Rotation { Self::from_matrix_unchecked(SMatrix::::identity()) } } impl Rotation { /// Cast the components of `self` to another type. /// /// # Example /// ``` /// # use nalgebra::Rotation2; /// let rot = Rotation2::::identity(); /// let rot2 = rot.cast::(); /// assert_eq!(rot2, Rotation2::::identity()); /// ``` pub fn cast(self) -> Rotation where Rotation: SupersetOf, { crate::convert(self) } } impl One for Rotation where T: Scalar + Zero + One + ClosedAdd + ClosedMul, { #[inline] fn one() -> Self { Self::identity() } }