use num::{One, Zero}; use simba::scalar::{ClosedAdd, ClosedMul, SupersetOf}; use crate::base::{SMatrix, Scalar}; use crate::geometry::Rotation; /// # Identity impl Rotation where T: Scalar + Zero + One, { /// Creates a new square identity rotation of the given `dimension`. /// /// # Example /// ``` /// # use nalgebra::Quaternion; /// let rot1 = Quaternion::identity(); /// let rot2 = Quaternion::new(1.0, 2.0, 3.0, 4.0); /// /// 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() } }