fix angle order

This commit is contained in:
Robin Appelman 2024-12-31 00:11:38 +01:00
commit 1e599c380a

View file

@ -206,22 +206,10 @@ impl From<RadianEuler> for Euler<Deg<f32>> {
impl From<RadianEuler> for cgmath::Quaternion<f32> { impl From<RadianEuler> for cgmath::Quaternion<f32> {
fn from(value: RadianEuler) -> Self { fn from(value: RadianEuler) -> Self {
let (sy, cy) = Rad::sin_cos(Rad(value.yaw * 0.5)); // angles are applied in roll, yaw, pitch order
let (sp, cp) = Rad::sin_cos(Rad(value.pitch * 0.5)); cgmath::Quaternion::from_angle_y(Rad(value.pitch))
let (sr, cr) = Rad::sin_cos(Rad(-value.roll * 0.5)); * cgmath::Quaternion::from_angle_z(Rad(value.yaw))
* cgmath::Quaternion::from_angle_x(Rad(-value.roll))
let sr_cp = sr * cp;
let cr_sp = cr * sp;
let cr_cp = cr * cp;
let sr_sp = sr * sp;
cgmath::Quaternion::new(
cr_cp * cy + sr_sp * sy,
sr_cp * cy - cr_sp * sy,
cr_sp * cy + sr_cp * sy,
cr_cp * sy - sr_sp * cy,
)
} }
} }