Antkeeper  0.0.1
cartesian.hpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2023 Christopher J. Howard
3  *
4  * This file is part of Antkeeper source code.
5  *
6  * Antkeeper source code is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * Antkeeper source code is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with Antkeeper source code. If not, see <http://www.gnu.org/licenses/>.
18  */
19 
20 #ifndef ANTKEEPER_GEOM_CARTESIAN_HPP
21 #define ANTKEEPER_GEOM_CARTESIAN_HPP
22 
23 #include <engine/math/vector.hpp>
24 #include <cmath>
25 
26 namespace geom {
27 
29 namespace cartesian {
30 
39 template <class T>
41 
42 template <class T>
44 {
45  const T xx_yy = v.x() * v.x() + v.y() * v.y();
46 
47  return math::vec3<T>
48  {
49  std::sqrt(xx_yy + v.z() * v.z()),
50  std::atan2(v.z(), std::sqrt(xx_yy)),
51  std::atan2(v.y(), v.x())
52  };
53 }
54 
55 } // namespace cartesian
56 } // namespace geom
57 
58 #endif // ANTKEEPER_GEOM_CARTESIAN_HPP
math::vec3< T > to_spherical(const math::vec3< T > &v)
Converts Cartesian (rectangular) coordinates to spherical coordinates.
Definition: cartesian.hpp:43
Geometric algorithms.
vector< T, N > sqrt(const vector< T, N > &x)
Takes the square root of each element.
math::vec3< T > cartesian(const math::vec3< T > &v)
Converts PQW coordinates from spherical to Cartesian.
Definition: frame.hpp:96