Use absolute values for radian constants
This commit is contained in:
parent
90802b1713
commit
3a48006ba7
2 changed files with 34 additions and 9 deletions
15
src/angle.rs
15
src/angle.rs
|
@ -3,6 +3,7 @@ use core::f64::consts::pi;
|
|||
|
||||
use funs::triganomic::{cos, sin};
|
||||
use mat::{Mat3, Mat4};
|
||||
use num::consts::{FloatConsts, IntConsts};
|
||||
use num::cast::{NumCast, cast};
|
||||
use quat::Quat;
|
||||
use vec::Vec3;
|
||||
|
@ -39,13 +40,13 @@ pub trait Angle<T>: Add<self,self>
|
|||
pub enum Radians<T> = T;
|
||||
|
||||
// FIXME: not sure why I need the Eq and Ord trait bounds, but Rust complains if I don't include them
|
||||
pub impl<T:Copy Num NumCast Eq Ord> Radians<T>: Angle<T> {
|
||||
#[inline(always)] static pure fn full_turn() -> Radians<T> { Radians(cast(2.0 * pi)) } // TODO: calculate absolute values
|
||||
#[inline(always)] static pure fn half_turn() -> Radians<T> { Radians(cast(pi)) }
|
||||
#[inline(always)] static pure fn quadrant() -> Radians<T> { Radians(cast(pi / 2.0)) }
|
||||
#[inline(always)] static pure fn sextant() -> Radians<T> { Radians(cast(pi / 3.0)) }
|
||||
#[inline(always)] static pure fn octant() -> Radians<T> { Radians(cast(pi / 4.0)) }
|
||||
#[inline(always)] static pure fn zero() -> Radians<T> { Radians(cast(0.0)) }
|
||||
pub impl<T:Copy FloatConsts Num NumCast Eq Ord> Radians<T>: Angle<T> {
|
||||
#[inline(always)] static pure fn full_turn() -> Radians<T> { Radians(FloatConsts::two_pi()) }
|
||||
#[inline(always)] static pure fn half_turn() -> Radians<T> { Radians(FloatConsts::pi()) }
|
||||
#[inline(always)] static pure fn quadrant() -> Radians<T> { Radians(FloatConsts::pi_2()) }
|
||||
#[inline(always)] static pure fn sextant() -> Radians<T> { Radians(FloatConsts::pi_3()) }
|
||||
#[inline(always)] static pure fn octant() -> Radians<T> { Radians(FloatConsts::pi_4()) }
|
||||
#[inline(always)] static pure fn zero() -> Radians<T> { Radians(NumCast::zero()) }
|
||||
|
||||
#[inline(always)] pure fn to_radians(&self) -> Radians<T> { *self }
|
||||
#[inline(always)] pure fn to_degrees(&self) -> Degrees<T> { Degrees(**self * cast(180.0 / pi)) }
|
||||
|
|
|
@ -1,10 +1,16 @@
|
|||
trait IntConsts {
|
||||
pub trait IntConsts {
|
||||
static pure fn zero() -> self;
|
||||
static pure fn one() -> self;
|
||||
}
|
||||
|
||||
trait FloatConsts: IntConsts {
|
||||
pub trait FloatConsts: IntConsts {
|
||||
static pure fn two_pi() -> self;
|
||||
static pure fn pi() -> self;
|
||||
static pure fn pi_2() -> self;
|
||||
static pure fn pi_3() -> self;
|
||||
static pure fn pi_4() -> self;
|
||||
static pure fn pi_6() -> self;
|
||||
static pure fn pi_8() -> self;
|
||||
static pure fn frac_pi_2() -> self;
|
||||
static pure fn frac_pi_4() -> self;
|
||||
static pure fn frac_1_pi() -> self;
|
||||
|
@ -75,7 +81,13 @@ pub impl f32: IntConsts {
|
|||
}
|
||||
|
||||
pub impl f32: FloatConsts {
|
||||
#[inline(always)] static pure fn two_pi() -> f32 { 6.28318530717958647692528676655900576_f32 }
|
||||
#[inline(always)] static pure fn pi() -> f32 { 3.14159265358979323846264338327950288_f32 }
|
||||
#[inline(always)] static pure fn pi_2() -> f32 { 1.57079632679489661923132169163975144_f32 }
|
||||
#[inline(always)] static pure fn pi_3() -> f32 { 1.04719755119659774615421446109316763_f32 }
|
||||
#[inline(always)] static pure fn pi_4() -> f32 { 0.78539816339744830961566084581987572_f32 }
|
||||
#[inline(always)] static pure fn pi_6() -> f32 { 0.52359877559829887307710723054658381_f32 }
|
||||
#[inline(always)] static pure fn pi_8() -> f32 { 0.39269908169872415480783042290993786_f32 }
|
||||
#[inline(always)] static pure fn frac_pi_2() -> f32 { 1.57079632679489661923132169163975144_f32 }
|
||||
#[inline(always)] static pure fn frac_pi_4() -> f32 { 0.785398163397448309615660845819875721_f32 }
|
||||
#[inline(always)] static pure fn frac_1_pi() -> f32 { 0.318309886183790671537767526745028724_f32 }
|
||||
|
@ -96,7 +108,13 @@ pub impl f64: IntConsts {
|
|||
}
|
||||
|
||||
pub impl f64: FloatConsts {
|
||||
#[inline(always)] static pure fn two_pi() -> f64 { 6.28318530717958647692528676655900576_f64 }
|
||||
#[inline(always)] static pure fn pi() -> f64 { 3.14159265358979323846264338327950288_f64 }
|
||||
#[inline(always)] static pure fn pi_2() -> f64 { 1.57079632679489661923132169163975144_f64 }
|
||||
#[inline(always)] static pure fn pi_3() -> f64 { 1.04719755119659774615421446109316763_f64 }
|
||||
#[inline(always)] static pure fn pi_4() -> f64 { 0.78539816339744830961566084581987572_f64 }
|
||||
#[inline(always)] static pure fn pi_6() -> f64 { 0.52359877559829887307710723054658381_f64 }
|
||||
#[inline(always)] static pure fn pi_8() -> f64 { 0.39269908169872415480783042290993786_f64 }
|
||||
#[inline(always)] static pure fn frac_pi_2() -> f64 { 1.57079632679489661923132169163975144_f64 }
|
||||
#[inline(always)] static pure fn frac_pi_4() -> f64 { 0.785398163397448309615660845819875721_f64 }
|
||||
#[inline(always)] static pure fn frac_1_pi() -> f64 { 0.318309886183790671537767526745028724_f64 }
|
||||
|
@ -117,7 +135,13 @@ pub impl float: IntConsts {
|
|||
}
|
||||
|
||||
pub impl float: FloatConsts {
|
||||
#[inline(always)] static pure fn two_pi() -> float { 6.28318530717958647692528676655900576 }
|
||||
#[inline(always)] static pure fn pi() -> float { 3.14159265358979323846264338327950288 }
|
||||
#[inline(always)] static pure fn pi_2() -> float { 1.57079632679489661923132169163975144 }
|
||||
#[inline(always)] static pure fn pi_3() -> float { 1.04719755119659774615421446109316763 }
|
||||
#[inline(always)] static pure fn pi_4() -> float { 0.78539816339744830961566084581987572 }
|
||||
#[inline(always)] static pure fn pi_6() -> float { 0.52359877559829887307710723054658381 }
|
||||
#[inline(always)] static pure fn pi_8() -> float { 0.39269908169872415480783042290993786 }
|
||||
#[inline(always)] static pure fn frac_pi_2() -> float { 1.57079632679489661923132169163975144 }
|
||||
#[inline(always)] static pure fn frac_pi_4() -> float { 0.785398163397448309615660845819875721 }
|
||||
#[inline(always)] static pure fn frac_1_pi() -> float { 0.318309886183790671537767526745028724 }
|
||||
|
|
Loading…
Reference in a new issue