FOUND
Loading...
Searching...
No Matches
attitude-utils.hpp
1#ifndef SRC_COMMON_SPATIAL_ATTITUDE_UTILS_HPP_
2#define SRC_COMMON_SPATIAL_ATTITUDE_UTILS_HPP_
3
4#include <Eigen/Core>
5#include <Eigen/Geometry>
6
7#include <memory>
8
9#include "common/decimal.hpp"
10
11namespace found {
12
16
24using Vec2 = Eigen::Matrix<decimal, 2, 1>;
25
33using Vec3 = Eigen::Matrix<decimal, 3, 1>;
34
38
47Vec2 Midpoint(const Vec2 &, const Vec2 &);
48
57Vec3 Midpoint(const Vec3 &, const Vec3 &);
58
68Vec3 Midpoint(const Vec3 &, const Vec3 &, const Vec3 &);
69
78decimal Distance(const Vec2 &, const Vec2 &);
79
88decimal Distance(const Vec3 &, const Vec3 &);
89
93
102typedef Eigen::Matrix<decimal, 2, 2> Mat2;
103
112typedef Eigen::Matrix<decimal, 3, 3> Mat3;
113
121typedef Vec3 EulerAngles;
122
126
138typedef Eigen::Quaternion<decimal> Quaternion;
139
141typedef Eigen::AngleAxis<decimal> AngleAxis;
142
146
147
149
164Quaternion SphericalToQuaternion(decimal ra, decimal dec, decimal roll);
165
178inline Quaternion SphericalToQuaternion(EulerAngles angles)
179 { return SphericalToQuaternion(angles.x(), angles.y(), angles.z()); }
180
181
183
184
192constexpr decimal RadToDeg(decimal rad) {
193 return rad*DECIMAL(180.0)/DECIMAL_M_PI;
194}
195
203constexpr decimal DegToRad(decimal deg) {
204 return deg/DECIMAL(180.0)*DECIMAL_M_PI;
205}
206
219constexpr decimal RadToArcSec(decimal rad) {
220 return RadToDeg(rad) * DECIMAL(3600.0);
221}
222
231constexpr decimal ArcSecToRad(decimal arcSec) {
232 return DegToRad(arcSec / DECIMAL(3600.0));
233}
234
235} // namespace found
236
237#endif // SRC_COMMON_SPATIAL_ATTITUDE_UTILS_HPP_