diff --git a/src/funs/triganomic.rs b/src/funs/triganomic.rs index 3dd8a65..48648dc 100644 --- a/src/funs/triganomic.rs +++ b/src/funs/triganomic.rs @@ -131,6 +131,84 @@ pub impl float: InvTrig { #[inline(always)] pure fn atan() -> Radians { Radians(f64::atan(cast(self)).to_float()) } } +// TODO: figure out how to merge with InvTrig +pub trait InvTrigV { + pure fn asin() -> T; + pure fn acos() -> T; + pure fn atan() -> T; +} + +pub impl Vec2: InvTrigV>> { + #[inline(always)] + pure fn asin() -> Vec2> { + Vec2::new(asin(&self[0]), + asin(&self[1])) + } + + #[inline(always)] + pure fn acos() -> Vec2> { + Vec2::new(acos(&self[0]), + acos(&self[1])) + } + + #[inline(always)] + pure fn atan() -> Vec2> { + Vec2::new(atan(&self[0]), + atan(&self[1])) + } +} + +pub impl Vec3: InvTrigV>> { + #[inline(always)] + pure fn asin() -> Vec3> { + Vec3::new(asin(&self[0]), + asin(&self[1]), + asin(&self[2])) + } + + #[inline(always)] + pure fn acos() -> Vec3> { + Vec3::new(acos(&self[0]), + acos(&self[1]), + acos(&self[2])) + } + + #[inline(always)] + pure fn atan() -> Vec3> { + Vec3::new(atan(&self[0]), + atan(&self[1]), + atan(&self[2])) + } +} + +pub impl Vec4: InvTrigV>> { + #[inline(always)] + pure fn asin() -> Vec4> { + Vec4::new(asin(&self[0]), + asin(&self[1]), + asin(&self[2]), + asin(&self[3])) + } + + #[inline(always)] + pure fn acos() -> Vec4> { + Vec4::new(acos(&self[0]), + acos(&self[1]), + acos(&self[2]), + acos(&self[3])) + } + + #[inline(always)] + pure fn atan() -> Vec4> { + Vec4::new(atan(&self[0]), + atan(&self[1]), + atan(&self[2]), + atan(&self[3])) + } +} + + + /// /// Hyperbolic functions ///