12 #include <mrpt/config.h>      34     q.rotationMatrixNoResize(
R);
    52     tang2mat_jacob J = tang2mat_jacob::Zero();
    53     J(1, 2) = J(5, 0) = J(6, 1) = +1.0;
    54     J(2, 1) = J(3, 2) = J(7, 0) = -1.0;
    74     const auto squared_n = q.
x() * q.
x() + q.
y() * q.
y() + q.
z() * q.
z();
    75     const auto n = sqrt(squared_n);
    78     double two_atan_nbyw_by_n;
    91         ASSERTMSG_(std::abs(w) >= 1e-7, 
"Quaternion should be normalized!");
    92         two_atan_nbyw_by_n = 2.0 / w - 2.0 * (squared_n) / (w * w * w);
    96         if (std::abs(w) < 1e-7)
    99                 two_atan_nbyw_by_n = 
M_PI / n;
   101                 two_atan_nbyw_by_n = -
M_PI / n;
   105             two_atan_nbyw_by_n = 2.0 * atan(n / w) / n;
   110     ret[0] = two_atan_nbyw_by_n * q.
x();
   111     ret[1] = two_atan_nbyw_by_n * q.
y();
   112     ret[2] = two_atan_nbyw_by_n * q.
z();
   118     const double yaw, 
const double pitch, 
const double roll)
   122     ::sincos(yaw, &sy, &cy);
   124     ::sincos(
pitch, &sp, &cp);
   126     ::sincos(
roll, &sr, &cr);
   128     const double cy = cos(yaw);
   129     const double sy = sin(yaw);
   130     const double cp = cos(
pitch);
   131     const double sp = sin(
pitch);
   132     const double cr = cos(
roll);
   133     const double sr = sin(
roll);
   137     alignas(MRPT_MAX_STATIC_ALIGN_BYTES) 
const double rot_vals[] = {
   138         cy * cp, cy * sp * sr - sy * cr, cy * sp * cr + sy * sr,
   139         sy * cp, sy * sp * sr + cy * cr, sy * sp * cr - cy * sr,
   140         -sp, cp * sr, cp * cr
   144     R.loadFromArray(rot_vals);
   148 template <
typename VEC3, 
typename MAT3x3, 
typename MAT3x9>
   149 inline void M3x9(
const VEC3& a, 
const MAT3x3& B, MAT3x9& RES)
   152     alignas(MRPT_MAX_STATIC_ALIGN_BYTES) 
const double vals[] = {
   153         a[0], -B(0, 2), B(0, 1), B(0, 2), a[0], -B(0, 0), -B(0, 1), B(0, 0), a[0],
   154         a[1], -B(1, 2), B(1, 1), B(1, 2), a[1], -B(1, 0), -B(1, 1), B(1, 0), a[1],
   155         a[2], -B(2, 2), B(2, 1), B(2, 2), a[2], -B(2, 0), -B(2, 1), B(2, 0), a[2]
   158     RES.loadFromArray(vals);
   165     const double d = 0.5 * (
R(0, 0) + 
R(1, 1) + 
R(2, 2) - 1);
   170         a[0] = a[1] = a[2] = 0;
   175         const double theta = acos(d);
   176         const double d2 = 
square(d);
   177         const double sq = std::sqrt(1 - d2);
   179         a *= (d * theta - sq) / (4 * (sq * sq * sq));
   190     v[0] = 
R(2, 1) - 
R(1, 2);
   191     v[1] = 
R(0, 2) - 
R(2, 0);
   192     v[2] = 
R(1, 0) - 
R(0, 1);
 A compile-time fixed-size numeric matrix container. 
 
T y() const
Return y coordinate of the quaternion. 
 
void getAsQuaternion(mrpt::math::CQuaternionDouble &q, mrpt::optional_ref< mrpt::math::CMatrixDouble43 > out_dq_dr=std::nullopt) const
Returns the quaternion associated to the rotation of this object (NOTE: XYZ translation is ignored)  ...
 
This base provides a set of functions for maths stuff. 
 
T r() const
Return r (real part) coordinate of the quaternion. 
 
#define ASSERTMSG_(f, __ERROR_MSG)
Defines an assertion mechanism. 
 
T wrapToPi(T a)
Modifies the given angle to translate it into the ]-pi,pi] range. 
 
Classes for 2D/3D geometry representation, both of single values and probability density distribution...
 
return_t square(const num_t x)
Inline function for the square of a number. 
 
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries. 
 
T x() const
Return x coordinate of the quaternion. 
 
A class used to store a 3D pose (a 3D translation + a rotation in 3D). 
 
void M3x9(const VEC3 &a, const MAT3x3 &B, MAT3x9 &RES)
 
A quaternion, which can represent a 3D rotation as pair , with a real part "r" and a 3D vector ...
 
Traits for SO(n), rotations in R^n space. 
 
T z() const
Return z coordinate of the quaternion. 
 
void setDiagonal(const std::size_t N, const T value)
Resize to NxN, set all entries to zero, except the main diagonal which is set to value ...
 
void fromRodriguesVector(const ARRAYLIKE3 &v)
Set this quaternion to the rotation described by a 3D (Rodrigues) rotation vector : If ...