nalgebra/nalgebra-glm/src/ext/quaternion_transform.rs

27 lines
739 B
Rust
Raw Normal View History

use na::{Real, U3, UnitQuaternion, Unit};
use aliases::{Vec, Qua};
/// Computes the quaternion exponential.
pub fn quat_exp<N: Real>(q: &Qua<N>) -> Qua<N> {
q.exp()
}
/// Computes the quaternion logarithm.
pub fn quat_log<N: Real>(q: &Qua<N>) -> Qua<N> {
q.ln()
}
/// Raises the quaternion `q` to the power `y`.
pub fn quat_pow<N: Real>(q: &Qua<N>, y: N) -> Qua<N> {
q.powf(y)
}
/// Builds a quaternion from an axis and an angle, and right-multiply it to the quaternion `q`.
pub fn quat_rotate<N: Real>(q: &Qua<N>, angle: N, axis: &Vec<N, U3>) -> Qua<N> {
q * UnitQuaternion::from_axis_angle(&Unit::new_normalize(*axis), angle).unwrap()
}
//pub fn quat_sqrt<N: Real>(q: &Qua<N>) -> Qua<N> {
// unimplemented!()
//}