8#include <janus/math/Arithmetic.hpp>
9#include <janus/math/Linalg.hpp>
10#include <janus/math/Logic.hpp>
11#include <janus/math/Rotations.hpp>
12#include <janus/math/Trig.hpp>
32template <
typename Scalar> Mat3<Scalar>
skew(
const Vec3<Scalar> &v) {
53template <
typename Scalar> Vec3<Scalar>
unskew(
const Mat3<Scalar> &S) {
74template <
typename Scalar>
75Mat3<Scalar>
compose_dcm(
const Mat3<Scalar> &R1,
const Mat3<Scalar> &R2) {
92template <
typename Scalar>
93Mat3<Scalar>
relative_dcm(
const Mat3<Scalar> &R_A,
const Mat3<Scalar> &R_B) {
94 return R_B.transpose() * R_A;
111template <
typename Scalar>
113 return Mat3<Scalar>::Identity() +
skew(theta);
127template <
typename Scalar>
129 Scalar half = Scalar(0.5);
131 theta(0) = half * (R(2, 1) - R(1, 2));
132 theta(1) = half * (R(0, 2) - R(2, 0));
133 theta(2) = half * (R(1, 0) - R(0, 1));
151template <
typename Derived>
152auto is_valid_dcm(
const Eigen::MatrixBase<Derived> &R,
double tol = 1e-9) {
153 return janus::is_valid_rotation_matrix(R, tol);
166template <
typename Scalar>
168 return janus::rotation_matrix_3d(theta, axis);
Definition Aerodynamics.hpp:11
Mat3< Scalar > skew(const Vec3< Scalar > &v)
Definition DCMUtils.hpp:32
Vec3< Scalar > small_angle_from_dcm(const Mat3< Scalar > &R)
Definition DCMUtils.hpp:128
Mat3< Scalar > dcm_from_small_angle(const Vec3< Scalar > &theta)
Definition DCMUtils.hpp:112
Mat3< Scalar > relative_dcm(const Mat3< Scalar > &R_A, const Mat3< Scalar > &R_B)
Definition DCMUtils.hpp:93
Mat3< Scalar > compose_dcm(const Mat3< Scalar > &R1, const Mat3< Scalar > &R2)
Definition DCMUtils.hpp:75
Mat3< Scalar > dcm_principal_axis(Scalar theta, int axis)
Definition DCMUtils.hpp:167
auto is_valid_dcm(const Eigen::MatrixBase< Derived > &R, double tol=1e-9)
Definition DCMUtils.hpp:152
Vec3< Scalar > unskew(const Mat3< Scalar > &S)
Definition DCMUtils.hpp:53