From 3dc5e261269907bff2b15c2f2715185dd3a824c8 Mon Sep 17 00:00:00 2001 From: Brendan Zabarauskas Date: Sun, 4 Nov 2012 18:11:32 +1000 Subject: [PATCH] Add angle unit conversions --- src/common/math.rs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/common/math.rs b/src/common/math.rs index 82612e8..cdb7c33 100644 --- a/src/common/math.rs +++ b/src/common/math.rs @@ -210,7 +210,7 @@ pub trait Trig { #[inline(always)] pub pure fn tanh(n: T) -> T { n.tanh() } #[inline(always)] pub pure fn atan2(a: T, b: T) -> T { a.atan2(move b) } -pub impl T: Trig { +pub impl T: Trig { #[inline(always)] pure fn sin() -> T { f64::sin(self.cast()).cast() } #[inline(always)] pure fn cos() -> T { f64::cos(self.cast()).cast() } #[inline(always)] pure fn tan() -> T { f64::tan(self.cast()).cast() } @@ -221,4 +221,18 @@ pub impl T: Trig { #[inline(always)] pure fn cosh() -> T { f64::cosh(self.cast()).cast() } #[inline(always)] pure fn tanh() -> T { f64::tanh(self.cast()).cast() } #[inline(always)] pure fn atan2(n: T) -> T { f64::atan2(self.cast(), move n.cast()).cast() } +} + + +pub trait AngleUnits { + pure fn to_radians() -> self; + pure fn to_degrees() -> self; +} + +#[inline(always)] pub pure fn radians(degrees: T) -> T { degrees.to_radians() } +#[inline(always)] pub pure fn degrees(radians: T) -> T { radians.to_degrees() } + +pub impl T: AngleUnits { + #[inline(always)] pure fn to_radians() -> T { self * cast(f64::consts::pi / 180f64) } + #[inline(always)] pure fn to_degrees() -> T { self * cast(180f64 / f64::consts::pi) } } \ No newline at end of file