1#ifndef SRC_COMMON_SPATIAL_ATTITUDE_UTILS_HPP_
2#define SRC_COMMON_SPATIAL_ATTITUDE_UTILS_HPP_
5#include <Eigen/Geometry>
9#include "common/decimal.hpp"
24using Vec2 = Eigen::Matrix<decimal, 2, 1>;
33using Vec3 = Eigen::Matrix<decimal, 3, 1>;
47Vec2 Midpoint(
const Vec2 &,
const Vec2 &);
57Vec3 Midpoint(
const Vec3 &,
const Vec3 &);
68Vec3 Midpoint(
const Vec3 &,
const Vec3 &,
const Vec3 &);
78decimal Distance(
const Vec2 &,
const Vec2 &);
88decimal Distance(
const Vec3 &,
const Vec3 &);
102typedef Eigen::Matrix<decimal, 2, 2> Mat2;
112typedef Eigen::Matrix<decimal, 3, 3> Mat3;
121typedef Vec3 EulerAngles;
138typedef Eigen::Quaternion<decimal> Quaternion;
141typedef Eigen::AngleAxis<decimal> AngleAxis;
164Quaternion SphericalToQuaternion(decimal ra, decimal dec, decimal roll);
178inline Quaternion SphericalToQuaternion(EulerAngles angles)
179 {
return SphericalToQuaternion(angles.x(), angles.y(), angles.z()); }
192constexpr decimal RadToDeg(decimal rad) {
193 return rad*DECIMAL(180.0)/DECIMAL_M_PI;
203constexpr decimal DegToRad(decimal deg) {
204 return deg/DECIMAL(180.0)*DECIMAL_M_PI;
219constexpr decimal RadToArcSec(decimal rad) {
220 return RadToDeg(rad) * DECIMAL(3600.0);
231constexpr decimal ArcSecToRad(decimal arcSec) {
232 return DegToRad(arcSec / DECIMAL(3600.0));