15#ifndef MOMENTUM_EULERANGLES_H
16#define MOMENTUM_EULERANGLES_H
18#include <momentum_namespace.h>
19#include <momentum_export.h>
24#include "EulerConvention.h"
25#include <agx/EulerAngles.h>
71#define MOMENTUM_EULER_AXES() const int axes[4] = {0,1,2,0}
72#define MOMENTUM_EULER_PAXES() const int paxes[4] = {1,2,0,1};
82 inline int firstAxis()
const {
83 return ( m_c >> 3 )&3;
87 const static char *names[];
92 int getConvention()
const;
108 return ( m_c >> 2 )&1;
111 return ( m_c >> 1 )&1;
113 inline int i()
const {
114 MOMENTUM_EULER_AXES();
115 return axes[firstAxis()];
117 inline int j()
const {
118 MOMENTUM_EULER_PAXES();
119 return paxes[i()+isOdd()];
121 inline int k()
const {
122 MOMENTUM_EULER_PAXES();
123 return paxes[i()+!isOdd()];
136 enum Axes {X, Y, Z, W};
144 double setX(
double val);
150 double setY(
double val);
156 double setZ(
double val);
162 inline double& operator [] (
int i);
167 inline double operator [] (
int i)
const;
173 inline void set(
const Vec3& angles );
179 inline void set(
double x,
185 const EulerAngles::EulerOrder& setOrder(
const EulerAngles::EulerOrder& order);
188 const EulerAngles::EulerOrder& getOrder()
const;
198 operator agx::EulerAngles()
const
200 return agx::EulerAngles(x(), y(), z(), m_o.getConvention());
205 (*this) =
EulerAngles(e.x(), e.y(), e.z(), e.getOrder().getConvention());
340 return Vec3( m_angles[ 0 ], m_angles[ 1 ], m_angles[ 2 ] );
345 m_angles[0] = angles[0];
346 m_angles[1] = angles[1];
347 m_angles[2] = angles[2];
360 os <<
"[" << e[0] <<
" " << e[1] <<
" " << e[2] <<
"]";
Definition: EulerAngles.h:76
int j() const
Definition: EulerAngles.h:117
bool isStatic() const
The computational routines used by the EulerAngle class.
Definition: EulerAngles.h:104
bool operator=(const int &c)
Assignment operator and conversion from int.
int k() const
Definition: EulerAngles.h:121
bool isOdd() const
Definition: EulerAngles.h:107
int i() const
Definition: EulerAngles.h:113
int getConvention() const
Get the current convention.
Definition: EulerAngles.h:275
EulerOrder(EulerConvention::Convention=EulerConvention::DEFAULT_CONVENTION)
Default constructor: EulerConvention::Convention::DEFAULT_CONVENTION convention and 0 angles.
Definition: EulerAngles.h:286
bool isRepeat() const
Definition: EulerAngles.h:110
bool operator=(const EulerConvention::Convention &c)
Assignment operator.
Definition: EulerAngles.h:280
This class provides conversion services between Euler angles in any of the 24 conventions and corresp...
Definition: EulerAngles.h:64
void set(const Vec3 &angles)
Set the three angles in one call.
Definition: EulerAngles.h:343
double z() const
Get the third angle.
Definition: EulerAngles.h:306
double x() const
Get the first angle.
Definition: EulerAngles.h:288
static EulerAngles random(const Vec3 &min=Vec3(double(0.0)), const Vec3 &max=Vec3(2 *MOMENTUM_NAMESPACE::PI), EulerConvention::Convention c=EulerConvention::DEFAULT_CONVENTION)
EulerAngles operator=(const EulerAngles &e)
Assignment operator.
EulerAngles(double a, double b, double c, EulerConvention::Convention C=EulerConvention::DEFAULT_CONVENTION)
Explicit constructor.
const EulerAngles::EulerOrder & getOrder() const
Get or set the convention.
Definition: EulerAngles.h:333
std::pair< Matrix4x4, bool > getAsMatrix4x4(Matrix4x4 matrix) const
Compute the value of matrix m that corresponds to current angles in current convention.
double setY(double val)
Get or set the second angle.
Definition: EulerAngles.h:301
EulerAngles(const Matrix4x4 &m, EulerConvention::Convention C=EulerConvention::DEFAULT_CONVENTION)
Construct from affine matrix in given convention.
double setZ(double val)
Get or set the third angle.
Definition: EulerAngles.h:310
double setX(double val)
Get or set the first angle.
Definition: EulerAngles.h:292
std::pair< Quat, bool > getAsQuat() const
Compute the value of quaternion q that corresponds to current angles in current convention.
const EulerAngles::EulerOrder & setOrder(const EulerAngles::EulerOrder &order)
Get the convention.
Definition: EulerAngles.h:327
void set(const Quat &q, EulerConvention::Convention C=EulerConvention::BAD)
Set the angles to correspond to quaternion q in given convention.
double & operator[](int i)
Get an element by index as a reference.
Definition: EulerAngles.h:316
double y() const
Get the second angle.
Definition: EulerAngles.h:297
EulerAngles(EulerConvention::Convention C=EulerConvention::DEFAULT_CONVENTION)
Default constructor.
EulerAngles(const Quat &q, EulerConvention::Convention C=EulerConvention::DEFAULT_CONVENTION)
Construct from quaternion in given convention.
EulerAngles(const Vec3 &angles, EulerConvention::Convention C=EulerConvention::DEFAULT_CONVENTION)
Explicit constructor.
Vec3 asVec3() const
Definition: EulerAngles.h:338
EulerAngles(const EulerAngles &e)
Copy constructor.
EulerAngles(double a, double b, double c, int C)
Explicit constructor.
void set(const Matrix4x4 &m, EulerConvention::Convention C=EulerConvention::BAD)
Set the angles to correspond to matrix m in given convention.
Convention
Definition: EulerConvention.h:32
Matrix class for affine transformations.
Definition: Matrix4x4.h:51
The object holding quaternions and providing operations on these.
Definition: Quat.h:55
A 3 dimensional vector which can be used to define a point or a vector and contains basic arithmetic.
Definition: Vec3.h:40
Namespace for Momentum Scripting API.
Definition: AffineMatrix4x4.h:29
std::ostream & operator<<(std::ostream &os, const EulerAngles &e)
Definition: EulerAngles.h:358
const double PI
Definition: momentum_math.h:37