| /// @ref gtx_polar_coordinates |
| /// @file glm/gtx/polar_coordinates.inl |
| |
| namespace glm |
| { |
| template <typename T, precision P> |
| GLM_FUNC_QUALIFIER tvec3<T, P> polar |
| ( |
| tvec3<T, P> const & euclidean |
| ) |
| { |
| T const Length(length(euclidean)); |
| tvec3<T, P> const tmp(euclidean / Length); |
| T const xz_dist(sqrt(tmp.x * tmp.x + tmp.z * tmp.z)); |
| |
| return tvec3<T, P>( |
| asin(tmp.y), // latitude |
| atan(tmp.x, tmp.z), // longitude |
| xz_dist); // xz distance |
| } |
| |
| template <typename T, precision P> |
| GLM_FUNC_QUALIFIER tvec3<T, P> euclidean |
| ( |
| tvec2<T, P> const & polar |
| ) |
| { |
| T const latitude(polar.x); |
| T const longitude(polar.y); |
| |
| return tvec3<T, P>( |
| cos(latitude) * sin(longitude), |
| sin(latitude), |
| cos(latitude) * cos(longitude)); |
| } |
| |
| }//namespace glm |