use crate::*;
#[ inline ]
pub fn rot< E >( angle_radians : E ) -> Mat2< E, mat::DescriptorOrderColumnMajor >
where
E : MatEl + nd::NdFloat,
Mat2< E, mat::DescriptorOrderColumnMajor > : RawSliceMut< Scalar = E >,
{
let cos_theta = angle_radians.cos();
let sin_theta = angle_radians.sin();
Mat2::from_row_major
([
cos_theta, -sin_theta,
sin_theta, cos_theta,
])
}
#[ inline ]
pub fn scale< E, Scaling >( scaling : Scaling ) -> Mat2< E, mat::DescriptorOrderColumnMajor >
where
E : MatEl + nd::NdFloat,
Scaling : VectorIter< E, 2 >,
Mat2< E, mat::DescriptorOrderColumnMajor > : RawSliceMut< Scalar = E >,
{
let mut iter = scaling.vector_iter();
let sx = *iter.next().unwrap();
let sy = *iter.next().unwrap();
Mat2::from_row_major
([
sx, E::zero(),
E::zero(), sy,
])
}
#[ inline ]
pub fn shear< E, Shearing >( shearing : Shearing ) -> Mat2< E, mat::DescriptorOrderColumnMajor >
where
E : MatEl + nd::NdFloat,
Shearing : VectorIter< E, 2 >,
Mat2< E, mat::DescriptorOrderColumnMajor > : RawSliceMut< Scalar = E >,
{
let mut iter = shearing.vector_iter();
let shx = *iter.next().unwrap();
let shy = *iter.next().unwrap();
Mat2::from_row_major
([
E::one(), shx,
shy, E::one(),
])
}
#[ inline ]
pub fn reflect_x< E >() -> Mat2< E, mat::DescriptorOrderColumnMajor >
where
E : MatEl + nd::NdFloat,
Mat2< E, mat::DescriptorOrderColumnMajor > : RawSliceMut< Scalar = E >,
{
Mat2::from_row_major
([
E::one(), E::zero(),
E::zero(), -E::one(),
])
}
#[ inline ]
pub fn reflect_y< E >() -> Mat2< E, mat::DescriptorOrderColumnMajor >
where
E : MatEl + nd::NdFloat,
Mat2< E, mat::DescriptorOrderColumnMajor > : RawSliceMut< Scalar = E >,
{
Mat2::from_row_major
([
-E::one(), E::zero(),
E::zero(), E::one(),
])
}