Rosetta
Public Types | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | Friends | List of all members
numeric::BodyPosition< T > Class Template Reference

Rigid body 3-D position/transform. More...

#include <BodyPosition.hh>

Public Types

typedef T Value
 
typedef TReference
 
typedef T const & ConstReference
 
typedef TPointer
 
typedef T const * ConstPointer
 
typedef T value_type
 
typedef Treference
 
typedef T const & const_reference
 
typedef Tpointer
 
typedef T const * const_pointer
 
typedef NumericTraits< TTraits
 
typedef xyzVector< TAxis
 
typedef xyzVector< TPoint
 
typedef xyzVector< TVector
 
typedef xyzVector< TTranslation
 
typedef xyzMatrix< TRotation
 
typedef numeric::Quaternion< TQuaternion
 

Public Member Functions

 BodyPosition ()
 Default constructor. More...
 
 BodyPosition (Rotation const &R_a, Translation const &t_a)
 Rotation + Translation constructor. More...
 
 BodyPosition (Rotation const &R_a)
 Rotation constructor. More...
 
 BodyPosition (Quaternion const &q_a, Translation const &t_a)
 Quaternion + Translation constructor. More...
 
 BodyPosition (Quaternion const &q_a)
 Quaternion constructor. More...
 
 BodyPosition (Point const &, Vector const &x1, Vector const &u1, Point const &, Vector const &x2, Vector const &u2, Value const &cos, Value const &sin, Value const &csc)
 Point + Vector constructor. More...
 
 BodyPosition (BodyPosition const &bp)
 Copy constructor. More...
 
 ~BodyPosition ()
 Destructor. More...
 
BodyPositionoperator= (BodyPosition const &bp)
 Copy assignment. More...
 
Rotation const & R () const
 Rotation. More...
 
Quaternion const & q () const
 Quaternion. More...
 
Translation const & t () const
 Translation. More...
 
Value angle () const
 Principal angle of rotation (on [0,2*pi]) More...
 
Axis axis () const
 Axis of Rotation unit vector (direction for angle on [0,2*pi]) More...
 
Axisaxis (Axis &u) const
 Axis of rotation unit vector: Passed vector (direction for angle on [0,2*pi]) More...
 
BodyPosition const & operator() (Point &p) const
 Transform a Point. More...
 
BodyPosition const & transform (Point &p) const
 Transform a Point. More...
 
BodyPosition const & inverse_transform (Point &p) const
 Inverse transform a Point. More...
 
BodyPositionnormalize ()
 Normalize. More...
 
BodyPositionnormalize_if_needed (Value const &tol=Traits::quaternion_tolerance())
 Normalize if magnitude squared error exceeds tolerance. More...
 
BodyPositionto_identity ()
 Identity. More...
 
BodyPositioninvert ()
 Invert. More...
 
BodyPositionapply (BodyPosition const &p, bool const precise=true)
 Apply a successive BodyPosition transformation. More...
 
BodyPositionleft_transform_by (BodyPosition const &p, bool const precise=true)
 Left transform by a BodyPosition. More...
 
BodyPositionright_transform_by (BodyPosition const &p, bool const precise=true)
 Right transform by a BodyPosition. More...
 
BodyPositionleft_transform_by_inverse_of (BodyPosition const &p, bool const precise=true)
 Left transform by the inverse of a BodyPosition. More...
 
BodyPositionright_transform_by_inverse_of (BodyPosition const &p, bool const precise=true)
 Right transform by the inverse of a BodyPosition. More...
 
BodyPosition inverse () const
 Inverse. More...
 
Point transformed (Point const &p) const
 Transformed Point. More...
 
Point inverse_transformed (Point const &p) const
 Inverse transformed Point. More...
 
Translation inverse_translation () const
 Inverse translation. More...
 

Static Public Member Functions

static BodyPosition identity ()
 Identity named constructor. More...
 
static BodyPosition const & I ()
 Identity BodyPosition for expressions. More...
 

Private Member Functions

BodyPosition const & R_refresh (bool const precise=true) const
 Refresh rotation matrix from Quaternion. More...
 
BodyPosition const & q_refresh (bool const precise=true) const
 Refresh Quaternion from rotation matrix. More...
 

Private Attributes

Rotation R_
 Rotation matrix. More...
 
bool R_fresh_
 Rotation matrix status. More...
 
Quaternion q_
 Quaternion. More...
 
bool q_fresh_
 Quaternion status. More...
 
Translation t_
 Translation. More...
 

Friends

bool operator== (BodyPosition const &p1, BodyPosition const &p2)
 BodyPosition == BodyPosition. More...
 
bool operator!= (BodyPosition const &p1, BodyPosition const &p2)
 BodyPosition != BodyPosition. More...
 

Detailed Description

template<typename T>
class numeric::BodyPosition< T >

Rigid body 3-D position/transform.

Remarks
  • Dual personality: rotation matrix and quaternion representations
  • Rotation matrix is faster for transforming points
  • Quaternion is faster for successive frame transforms and easier to keep normalized
  • For quaternion q = ( w, x, y, z ) the equivalent rotation matrix is: 1-2( y^2 + z^2 ) 2( x y - w z ) 2( x z + w y ) 2( x y + w z ) 1-2( x^2 + z^2 ) 2( y z - w x ) 2( x z - w y ) 2( y z + w x ) 1-2( x^2 + y^2 )
  • Quaternions q and -q have the same rotation matrix
  • If an odd multiple of 2*pi is added to an angle the quaternion q is changed to -q
  • Invariant: The rotation matrix or quaternion or both must be "fresh" before and after every member function call

Member Typedef Documentation

◆ Axis

template<typename T >
typedef xyzVector< T > numeric::BodyPosition< T >::Axis

◆ const_pointer

template<typename T >
typedef T const* numeric::BodyPosition< T >::const_pointer

◆ const_reference

template<typename T >
typedef T const& numeric::BodyPosition< T >::const_reference

◆ ConstPointer

template<typename T >
typedef T const* numeric::BodyPosition< T >::ConstPointer

◆ ConstReference

template<typename T >
typedef T const& numeric::BodyPosition< T >::ConstReference

◆ Point

template<typename T >
typedef xyzVector< T > numeric::BodyPosition< T >::Point

◆ Pointer

template<typename T >
typedef T* numeric::BodyPosition< T >::Pointer

◆ pointer

template<typename T >
typedef T* numeric::BodyPosition< T >::pointer

◆ Quaternion

template<typename T >
typedef numeric::Quaternion< T > numeric::BodyPosition< T >::Quaternion

◆ Reference

template<typename T >
typedef T& numeric::BodyPosition< T >::Reference

◆ reference

template<typename T >
typedef T& numeric::BodyPosition< T >::reference

◆ Rotation

template<typename T >
typedef xyzMatrix< T > numeric::BodyPosition< T >::Rotation

◆ Traits

template<typename T >
typedef NumericTraits< T > numeric::BodyPosition< T >::Traits

◆ Translation

template<typename T >
typedef xyzVector< T > numeric::BodyPosition< T >::Translation

◆ Value

template<typename T >
typedef T numeric::BodyPosition< T >::Value

◆ value_type

template<typename T >
typedef T numeric::BodyPosition< T >::value_type

◆ Vector

template<typename T >
typedef xyzVector< T > numeric::BodyPosition< T >::Vector

Constructor & Destructor Documentation

◆ BodyPosition() [1/7]

template<typename T >
numeric::BodyPosition< T >::BodyPosition ( )
inline

◆ BodyPosition() [2/7]

template<typename T >
numeric::BodyPosition< T >::BodyPosition ( Rotation const &  R_a,
Translation const &  t_a 
)
inline

Rotation + Translation constructor.

◆ BodyPosition() [3/7]

template<typename T >
numeric::BodyPosition< T >::BodyPosition ( Rotation const &  R_a)
inline

Rotation constructor.

◆ BodyPosition() [4/7]

template<typename T >
numeric::BodyPosition< T >::BodyPosition ( Quaternion const &  q_a,
Translation const &  t_a 
)
inline

Quaternion + Translation constructor.

◆ BodyPosition() [5/7]

template<typename T >
numeric::BodyPosition< T >::BodyPosition ( Quaternion const &  q_a)
inline

Quaternion constructor.

◆ BodyPosition() [6/7]

template<typename T >
numeric::BodyPosition< T >::BodyPosition ( Point const &  ,
Vector const &  x1,
Vector const &  u1,
Point const &  ,
Vector const &  x2,
Vector const &  u2,
Value const &  cos,
Value const &  sin,
Value const &  csc 
)
inline

Point + Vector constructor.

Note
Constructs the transform that takes a point p and unit vectors x and u bound to p and separated by an angle on (0,pi) from position 1 to 2

References numeric::csc(), pyrosetta.distributed.cluster.exceptions::T, and y1.

◆ BodyPosition() [7/7]

template<typename T >
numeric::BodyPosition< T >::BodyPosition ( BodyPosition< T > const &  bp)
inline

Copy constructor.

◆ ~BodyPosition()

template<typename T >
numeric::BodyPosition< T >::~BodyPosition ( )
inline

Destructor.

Member Function Documentation

◆ angle()

template<typename T >
Value numeric::BodyPosition< T >::angle ( ) const
inline

◆ apply()

template<typename T >
BodyPosition& numeric::BodyPosition< T >::apply ( BodyPosition< T > const &  p,
bool const  precise = true 
)
inline

◆ axis() [1/2]

template<typename T >
Axis numeric::BodyPosition< T >::axis ( ) const
inline

◆ axis() [2/2]

template<typename T >
Axis& numeric::BodyPosition< T >::axis ( Axis u) const
inline

◆ I()

template<typename T >
static BodyPosition const& numeric::BodyPosition< T >::I ( )
inlinestatic

Identity BodyPosition for expressions.

Note
Default and identity() named constructors can be faster for construction
Can be safely used in construction of global objects

◆ identity()

template<typename T >
static BodyPosition numeric::BodyPosition< T >::identity ( )
inlinestatic

Identity named constructor.

References numeric::BodyPosition< T >::BodyPosition().

◆ inverse()

template<typename T >
BodyPosition numeric::BodyPosition< T >::inverse ( ) const
inline

◆ inverse_transform()

template<typename T >
BodyPosition const& numeric::BodyPosition< T >::inverse_transform ( Point p) const
inline

◆ inverse_transformed()

template<typename T >
Point numeric::BodyPosition< T >::inverse_transformed ( Point const &  p) const
inline

◆ inverse_translation()

template<typename T >
Translation numeric::BodyPosition< T >::inverse_translation ( ) const
inline

◆ invert()

template<typename T >
BodyPosition& numeric::BodyPosition< T >::invert ( )
inline

◆ left_transform_by()

template<typename T >
BodyPosition& numeric::BodyPosition< T >::left_transform_by ( BodyPosition< T > const &  p,
bool const  precise = true 
)
inline

◆ left_transform_by_inverse_of()

template<typename T >
BodyPosition& numeric::BodyPosition< T >::left_transform_by_inverse_of ( BodyPosition< T > const &  p,
bool const  precise = true 
)
inline

◆ normalize()

template<typename T >
BodyPosition& numeric::BodyPosition< T >::normalize ( )
inline

◆ normalize_if_needed()

template<typename T >
BodyPosition& numeric::BodyPosition< T >::normalize_if_needed ( Value const &  tol = Traits::quaternion_tolerance())
inline

◆ operator()()

template<typename T >
BodyPosition const& numeric::BodyPosition< T >::operator() ( Point p) const
inline

◆ operator=()

template<typename T >
BodyPosition& numeric::BodyPosition< T >::operator= ( BodyPosition< T > const &  bp)
inline

◆ q()

template<typename T >
Quaternion const& numeric::BodyPosition< T >::q ( ) const
inline

◆ q_refresh()

template<typename T >
BodyPosition const& numeric::BodyPosition< T >::q_refresh ( bool const  precise = true) const
inlineprivate

◆ R()

template<typename T >
Rotation const& numeric::BodyPosition< T >::R ( ) const
inline

◆ R_refresh()

template<typename T >
BodyPosition const& numeric::BodyPosition< T >::R_refresh ( bool const  precise = true) const
inlineprivate

◆ right_transform_by()

template<typename T >
BodyPosition& numeric::BodyPosition< T >::right_transform_by ( BodyPosition< T > const &  p,
bool const  precise = true 
)
inline

◆ right_transform_by_inverse_of()

template<typename T >
BodyPosition& numeric::BodyPosition< T >::right_transform_by_inverse_of ( BodyPosition< T > const &  p,
bool const  precise = true 
)
inline

◆ t()

template<typename T >
Translation const& numeric::BodyPosition< T >::t ( ) const
inline

Translation.

References numeric::BodyPosition< T >::t_.

◆ to_identity()

template<typename T >
BodyPosition& numeric::BodyPosition< T >::to_identity ( )
inline

◆ transform()

template<typename T >
BodyPosition const& numeric::BodyPosition< T >::transform ( Point p) const
inline

◆ transformed()

template<typename T >
Point numeric::BodyPosition< T >::transformed ( Point const &  p) const
inline

Friends And Related Function Documentation

◆ operator!=

template<typename T >
bool operator!= ( BodyPosition< T > const &  p1,
BodyPosition< T > const &  p2 
)
friend

◆ operator==

template<typename T >
bool operator== ( BodyPosition< T > const &  p1,
BodyPosition< T > const &  p2 
)
friend

Member Data Documentation

◆ q_

template<typename T >
Quaternion numeric::BodyPosition< T >::q_
mutableprivate

◆ q_fresh_

template<typename T >
bool numeric::BodyPosition< T >::q_fresh_
mutableprivate

◆ R_

template<typename T >
Rotation numeric::BodyPosition< T >::R_
mutableprivate

◆ R_fresh_

template<typename T >
bool numeric::BodyPosition< T >::R_fresh_
mutableprivate

◆ t_

template<typename T >
Translation numeric::BodyPosition< T >::t_
private

The documentation for this class was generated from the following files: