/////////////////////////////////////////////////////////////////////////////////////////////////// // OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net) /////////////////////////////////////////////////////////////////////////////////////////////////// // Created : 2008-10-09 // Updated : 2008-10-09 // Licence : This source is under MIT License // File : glm/gtx/reciprocal.inl /////////////////////////////////////////////////////////////////////////////////////////////////// namespace glm{ namespace gtx{ namespace reciprocal{ // sec template GLM_FUNC_QUALIFIER genType sec ( genType const & angle ) { GLM_STATIC_ASSERT(detail::type::is_float, "'sec' only accept floating-point values"); return genType(1) / glm::cos(angle); } template GLM_FUNC_QUALIFIER detail::tvec2 sec ( detail::tvec2 const & angle ) { return detail::tvec2( sec(angle.x), sec(angle.y)); } template GLM_FUNC_QUALIFIER detail::tvec3 sec ( detail::tvec3 const & angle ) { return detail::tvec3( sec(angle.x), sec(angle.y), sec(angle.z)); } template GLM_FUNC_QUALIFIER detail::tvec4 sec ( detail::tvec4 const & angle ) { return detail::tvec4( sec(angle.x), sec(angle.y), sec(angle.z), sec(angle.w)); } // csc template GLM_FUNC_QUALIFIER genType csc ( genType const & angle ) { GLM_STATIC_ASSERT(detail::type::is_float, "'csc' only accept floating-point values"); return genType(1) / glm::sin(angle); } template GLM_FUNC_QUALIFIER detail::tvec2 csc ( detail::tvec2 const & angle ) { return detail::tvec2( csc(angle.x), csc(angle.y)); } template GLM_FUNC_QUALIFIER detail::tvec3 csc ( detail::tvec3 const & angle ) { return detail::tvec3( csc(angle.x), csc(angle.y), csc(angle.z)); } template GLM_FUNC_QUALIFIER detail::tvec4 csc ( detail::tvec4 const & angle ) { return detail::tvec4( csc(angle.x), csc(angle.y), csc(angle.z), csc(angle.w)); } // cot template GLM_FUNC_QUALIFIER genType cot ( genType const & angle ) { GLM_STATIC_ASSERT(detail::type::is_float, "'cot' only accept floating-point values"); return genType(1) / glm::tan(angle); } template GLM_FUNC_QUALIFIER detail::tvec2 cot ( detail::tvec2 const & angle ) { return detail::tvec2( cot(angle.x), cot(angle.y)); } template GLM_FUNC_QUALIFIER detail::tvec3 cot ( detail::tvec3 const & angle ) { return detail::tvec3( cot(angle.x), cot(angle.y), cot(angle.z)); } template GLM_FUNC_QUALIFIER detail::tvec4 cot ( detail::tvec4 const & angle ) { return detail::tvec4( cot(angle.x), cot(angle.y), cot(angle.z), cot(angle.w)); } // asec template GLM_FUNC_QUALIFIER genType asec ( genType const & x ) { GLM_STATIC_ASSERT(detail::type::is_float, "'asec' only accept floating-point values"); return acos(genType(1) / x); } template GLM_FUNC_QUALIFIER detail::tvec2 asec ( detail::tvec2 const & x ) { return detail::tvec2( asec(x.x), asec(x.y)); } template GLM_FUNC_QUALIFIER detail::tvec3 asec ( detail::tvec3 const & x ) { return detail::tvec3( asec(x.x), asec(x.y), asec(x.z)); } template GLM_FUNC_QUALIFIER detail::tvec4 asec ( detail::tvec4 const & x ) { return detail::tvec4( asec(x.x), asec(x.y), asec(x.z), asec(x.w)); } // acsc template GLM_FUNC_QUALIFIER genType acsc ( genType const & x ) { GLM_STATIC_ASSERT(detail::type::is_float, "'acsc' only accept floating-point values"); return asin(genType(1) / x); } template GLM_FUNC_QUALIFIER detail::tvec2 acsc ( detail::tvec2 const & x ) { return detail::tvec2( acsc(x.x), acsc(x.y)); } template GLM_FUNC_QUALIFIER detail::tvec3 acsc ( detail::tvec3 const & x ) { return detail::tvec3( acsc(x.x), acsc(x.y), acsc(x.z)); } template GLM_FUNC_QUALIFIER detail::tvec4 acsc ( detail::tvec4 const & x ) { return detail::tvec4( acsc(x.x), acsc(x.y), acsc(x.z), acsc(x.w)); } // acot template GLM_FUNC_QUALIFIER genType acot ( genType const & x ) { GLM_STATIC_ASSERT(detail::type::is_float, "'acot' only accept floating-point values"); genType const pi_over_2 = genType(3.1415926535897932384626433832795 / 2.0); return pi_over_2 - atan(x); } template GLM_FUNC_QUALIFIER detail::tvec2 acot ( detail::tvec2 const & x ) { return detail::tvec2( acot(x.x), acot(x.y)); } template GLM_FUNC_QUALIFIER detail::tvec3 acot ( detail::tvec3 const & x ) { return detail::tvec3( acot(x.x), acot(x.y), acot(x.z)); } template GLM_FUNC_QUALIFIER detail::tvec4 acot ( detail::tvec4 const & x ) { return detail::tvec4( acot(x.x), acot(x.y), acot(x.z), acot(x.w)); } // sech template GLM_FUNC_QUALIFIER genType sech ( genType const & angle ) { GLM_STATIC_ASSERT(detail::type::is_float, "'sech' only accept floating-point values"); return genType(1) / glm::cosh(angle); } template GLM_FUNC_QUALIFIER detail::tvec2 sech ( detail::tvec2 const & angle ) { return detail::tvec2( sech(angle.x), sech(angle.y)); } template GLM_FUNC_QUALIFIER detail::tvec3 sech ( detail::tvec3 const & angle ) { return detail::tvec3( sech(angle.x), sech(angle.y), sech(angle.z)); } template GLM_FUNC_QUALIFIER detail::tvec4 sech ( detail::tvec4 const & angle ) { return detail::tvec4( sech(angle.x), sech(angle.y), sech(angle.z), sech(angle.w)); } // csch template GLM_FUNC_QUALIFIER genType csch ( genType const & angle ) { GLM_STATIC_ASSERT(detail::type::is_float, "'csch' only accept floating-point values"); return genType(1) / glm::sinh(angle); } template GLM_FUNC_QUALIFIER detail::tvec2 csch ( detail::tvec2 const & angle ) { return detail::tvec2( csch(angle.x), csch(angle.y)); } template GLM_FUNC_QUALIFIER detail::tvec3 csch ( detail::tvec3 const & angle ) { return detail::tvec3( csch(angle.x), csch(angle.y), csch(angle.z)); } template GLM_FUNC_QUALIFIER detail::tvec4 csch ( detail::tvec4 const & angle ) { return detail::tvec4( csch(angle.x), csch(angle.y), csch(angle.z), csch(angle.w)); } // coth template GLM_FUNC_QUALIFIER genType coth ( genType const & angle ) { GLM_STATIC_ASSERT(detail::type::is_float, "'coth' only accept floating-point values"); return glm::cosh(angle) / glm::sinh(angle); } template GLM_FUNC_QUALIFIER detail::tvec2 coth ( detail::tvec2 const & angle ) { return detail::tvec2( coth(angle.x), coth(angle.y)); } template GLM_FUNC_QUALIFIER detail::tvec3 coth ( detail::tvec3 const & angle ) { return detail::tvec3( coth(angle.x), coth(angle.y), coth(angle.z)); } template GLM_FUNC_QUALIFIER detail::tvec4 coth ( detail::tvec4 const & angle ) { return detail::tvec4( coth(angle.x), coth(angle.y), coth(angle.z), coth(angle.w)); } // asech template GLM_FUNC_QUALIFIER genType asech ( genType const & x ) { GLM_STATIC_ASSERT(detail::type::is_float, "'asech' only accept floating-point values"); return acosh(genType(1) / x); } template GLM_FUNC_QUALIFIER detail::tvec2 asech ( detail::tvec2 const & x ) { return detail::tvec2( asech(x.x), asech(x.y)); } template GLM_FUNC_QUALIFIER detail::tvec3 asech ( detail::tvec3 const & x ) { return detail::tvec3( asech(x.x), asech(x.y), asech(x.z)); } template GLM_FUNC_QUALIFIER detail::tvec4 asech ( detail::tvec4 const & x ) { return detail::tvec4( asech(x.x), asech(x.y), asech(x.z), asech(x.w)); } // acsch template GLM_FUNC_QUALIFIER genType acsch ( genType const & x ) { GLM_STATIC_ASSERT(detail::type::is_float, "'acsch' only accept floating-point values"); return asinh(genType(1) / x); } template GLM_FUNC_QUALIFIER detail::tvec2 acsch ( detail::tvec2 const & x ) { return detail::tvec2( acsch(x.x), acsch(x.y)); } template GLM_FUNC_QUALIFIER detail::tvec3 acsch ( detail::tvec3 const & x ) { return detail::tvec3( acsch(x.x), acsch(x.y), acsch(x.z)); } template GLM_FUNC_QUALIFIER detail::tvec4 acsch ( detail::tvec4 const & x ) { return detail::tvec4( acsch(x.x), acsch(x.y), acsch(x.z), acsch(x.w)); } // acoth template GLM_FUNC_QUALIFIER genType acoth ( genType const & x ) { GLM_STATIC_ASSERT(detail::type::is_float, "'acoth' only accept floating-point values"); return atanh(genType(1) / x); } template GLM_FUNC_QUALIFIER detail::tvec2 acoth ( detail::tvec2 const & x ) { return detail::tvec2( acoth(x.x), acoth(x.y)); } template GLM_FUNC_QUALIFIER detail::tvec3 acoth ( detail::tvec3 const & x ) { return detail::tvec3( acoth(x.x), acoth(x.y), acoth(x.z)); } template GLM_FUNC_QUALIFIER detail::tvec4 acoth ( detail::tvec4 const & x ) { return detail::tvec4( acoth(x.x), acoth(x.y), acoth(x.z), acoth(x.w)); } }//namespace reciprocal }//namespace gtx }//namespace glm