• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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