use num::{One, Zero}; use simba::scalar::{ClosedAdd, ClosedMul, SupersetOf}; use crate::base::allocator::Allocator; use crate::base::dimension::DimName; use crate::base::{DefaultAllocator, MatrixN, Scalar}; use crate::geometry::Rotation; /// # Identity impl Rotation where N: Scalar + Zero + One, DefaultAllocator: Allocator, { /// 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(MatrixN::::identity()) } } impl Rotation where DefaultAllocator: Allocator, { /// 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, DefaultAllocator: Allocator, { crate::convert(self) } } impl One for Rotation where N: Scalar + Zero + One + ClosedAdd + ClosedMul, DefaultAllocator: Allocator, { #[inline] fn one() -> Self { Self::identity() } }