From 8a9668c39c62df1e0142e4a6734c213590c8307b Mon Sep 17 00:00:00 2001 From: Brendan Zabarauskas Date: Wed, 21 Nov 2012 11:56:39 +1000 Subject: [PATCH] Change quaternion constructors to static methods --- src/quat.rs | 34 +++++++++++----------------------- src/test/test_quat.rs | 4 ++-- 2 files changed, 13 insertions(+), 25 deletions(-) diff --git a/src/quat.rs b/src/quat.rs index 1943234..802685a 100644 --- a/src/quat.rs +++ b/src/quat.rs @@ -57,37 +57,19 @@ pub trait ToQuat { pub struct Quat { w: T, x: T, y: T, z: T } -pub mod Quat { +pub impl Quat { #[inline(always)] - pub pure fn new(w: T, x: T, y: T, z: T) -> Quat { + static pure fn new(w: T, x: T, y: T, z: T) -> Quat { Quat { w: move w, x: move x, y: move y, z: move z } } #[inline(always)] - pub pure fn from_sv(s: T, v: Vec3) -> Quat { - Quat::new(s, v.x, v.y, v.z) - } - - #[inline(always)] - pub pure fn from_axis_angle(axis: Vec3, theta: T) -> Quat { - let half = radians(&theta) / cast(2); - from_sv(cos(&half), axis.mul_t(sin(&half))) - } - - #[inline(always)] - pub pure fn zero() -> Quat { - let _0 = cast(0); - Quat::new(_0, _0, _0, _0) - } - - #[inline(always)] - pub pure fn identity() -> Quat { - let _0 = cast(0); - Quat::new(cast(1), _0, _0, _0) + static pure fn from_sv(s: T, v: &Vec3) -> Quat { + Quat::new(move s, v.x, v.y, v.z) } } -pub impl Quat: Quaternion { +pub impl Quat: Quaternion { #[inline(always)] static pure fn identity() -> Quat { Quat::new(NumCast::one(), @@ -243,6 +225,12 @@ pub impl Quat: Quaternion self.mul_t(cos(&theta)).add_q(&q.mul_t(sin(&theta))) } + + #[inline(always)] + pub pure fn from_axis_angle(axis: Vec3, theta: T) -> Quat { + let half = radians(&theta) / cast(2); + Quat::from_sv(cos(&half), &axis.mul_t(sin(&half))) + } #[inline(always)] pure fn to_Mat3() -> Mat3 { diff --git a/src/test/test_quat.rs b/src/test/test_quat.rs index f859d68..0f8c655 100644 --- a/src/test/test_quat.rs +++ b/src/test/test_quat.rs @@ -13,8 +13,8 @@ fn test_Quat() { assert a == Quat::new(1f, 2f, 3f, 4f); - assert Quat::zero() == Quat::new(0f, 0f, 0f, 0f); - assert Quat::identity() == Quat::new(1f, 0f, 0f, 0f); + // assert Quat::zero() == Quat::new(0f, 0f, 0f, 0f); + // assert Quat::identity() == Quat::new(1f, 0f, 0f, 0f); assert a.w == 1f; assert a.x == 2f;