use crate::Quaternion;
use crate::{ConstOne, ConstZero, One, RealField, Zero};
impl<F> Zero for Quaternion<F>
where
F: RealField,
{
fn zero() -> Self {
Quaternion::new(F::zero(), F::zero(), F::zero(), F::zero())
}
fn is_zero(&self) -> bool {
self.w.is_zero() && self.x.is_zero() && self.y.is_zero() && self.z.is_zero()
}
}
impl<F> ConstZero for Quaternion<F>
where
F: RealField + ConstZero,
{
const ZERO: Self = Quaternion {
w: F::ZERO,
x: F::ZERO,
y: F::ZERO,
z: F::ZERO,
};
}
impl<F> One for Quaternion<F>
where
F: RealField,
{
fn one() -> Self {
Quaternion::new(F::one(), F::zero(), F::zero(), F::zero())
}
fn is_one(&self) -> bool {
self.w.is_one() && self.x.is_zero() && self.y.is_zero() && self.z.is_zero()
}
}
impl<F> ConstOne for Quaternion<F>
where
F: RealField + ConstOne + ConstZero,
{
const ONE: Self = Quaternion {
w: F::ONE,
x: F::ZERO,
y: F::ZERO,
z: F::ZERO,
};
}