use crate::{Quaternion, RealField, Rotation};
impl<T: RealField> Rotation<T> for Quaternion<T> {
fn rotate_x(&self, angle: T) -> Self {
let half = angle / (T::one() + T::one());
let c = half.cos();
let s = half.sin();
let rotor = Quaternion {
w: c,
x: s,
y: T::zero(),
z: T::zero(),
};
rotor * *self
}
fn rotate_y(&self, angle: T) -> Self {
let half = angle / (T::one() + T::one());
let c = half.cos();
let s = half.sin();
let rotor = Quaternion {
w: c,
x: T::zero(),
y: s,
z: T::zero(),
};
rotor * *self
}
fn rotate_z(&self, angle: T) -> Self {
let half = angle / (T::one() + T::one());
let c = half.cos();
let s = half.sin();
let rotor = Quaternion {
w: c,
x: T::zero(),
y: T::zero(),
z: s,
};
rotor * *self
}
fn global_phase(&self, _angle: T) -> Self {
*self
}
}