1/// @ref gtx_polar_coordinates 2/// @file glm/gtx/polar_coordinates.inl 3 4namespace glm 5{ 6 template <typename T, precision P> 7 GLM_FUNC_QUALIFIER tvec3<T, P> polar 8 ( 9 tvec3<T, P> const & euclidean 10 ) 11 { 12 T const Length(length(euclidean)); 13 tvec3<T, P> const tmp(euclidean / Length); 14 T const xz_dist(sqrt(tmp.x * tmp.x + tmp.z * tmp.z)); 15 16 return tvec3<T, P>( 17 asin(tmp.y), // latitude 18 atan(tmp.x, tmp.z), // longitude 19 xz_dist); // xz distance 20 } 21 22 template <typename T, precision P> 23 GLM_FUNC_QUALIFIER tvec3<T, P> euclidean 24 ( 25 tvec2<T, P> const & polar 26 ) 27 { 28 T const latitude(polar.x); 29 T const longitude(polar.y); 30 31 return tvec3<T, P>( 32 cos(latitude) * sin(longitude), 33 sin(latitude), 34 cos(latitude) * cos(longitude)); 35 } 36 37}//namespace glm 38