MathLib
Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions | List of all members
BasicDualQuaternion< T > Class Template Reference

#include <math/DualQuaternion.hpp>

Public Types

Types
using value_type = T
 The underlying implementation type.
 

Public Member Functions

constexpr BasicDualQuaternion< T > conjugate () const
 
constexpr BasicDual< T > normsquared () const
 
constexpr BasicDual< T > norm () const
 
constexpr BasicDual< T > magnitude () const
 
const BasicQuaternion< T > & rotation () const
 
BasicVector3D< T > translation () const
 
constexpr BasicDualQuaternion< T > normalized () const
 
constexpr bool rotation_magnitude_is_one () const
 
constexpr bool rotation_and_translation_are_orthogonal () const
 
constexpr bool is_unit () const
 
Constructors
 BasicDualQuaternion ()=default
 
constexpr BasicDualQuaternion (const BasicQuaternion< T > &rotation, const BasicQuaternion< T > &translation)
 
constexpr BasicDualQuaternion (const BasicQuaternion< T > &rotation, T translation_x, T translation_y, T translation_z)
 
constexpr BasicDualQuaternion (const BasicQuaternion< T > &rotation, const BasicVector3D< T > &translation)
 
constexpr BasicDualQuaternion (const BasicDual< BasicQuaternion< T > > &underlying_representation)
 
Element Access
const BasicQuaternion< T > & real () const
 
const BasicQuaternion< T > & dual () const
 
Invalid Value Check
bool isNaN () const
 
bool isInf () const
 

Static Public Member Functions

static constexpr BasicVector3D< T > decode_point (const BasicDualQuaternion< T > &encoded_point)
 
Constants
static constexpr BasicDualQuaternion< T > identity ()
 
static constexpr BasicDualQuaternion< T > zero ()
 
Convenience Creation Functions
static constexpr BasicDualQuaternion< T > make_rotation (const BasicQuaternion< T > &rotation)
 
static constexpr BasicDualQuaternion< T > make_translation (T translation_x, T translation_y, T translation_z)
 
static constexpr BasicDualQuaternion< T > make_translation (const BasicVector3D< T > &translation)
 
static constexpr BasicDualQuaternion< T > make_coordinate_system (const BasicQuaternion< T > &rotation, T translation_x, T translation_y, T translation_z)
 
static constexpr BasicDualQuaternion< T > encode_point (const BasicVector3D< T > &point)
 

Friends

Equality
constexpr bool operator== (const BasicDualQuaternion< T > &left, const BasicDualQuaternion< T > &right)
 
constexpr bool approximately_equal_to (const BasicDualQuaternion< T > &value_to_test, const BasicDualQuaternion< T > &value_it_should_be, T tolerance=T{0.0002})
 
Operators
constexpr BasicDualQuaternion< T > operator+ (const BasicDualQuaternion< T > &left_side, const BasicDualQuaternion< T > &right_side)
 
constexpr BasicDualQuaternion< T > operator* (T scalar, const BasicDualQuaternion< T > &dual_quaternion)
 
constexpr BasicDualQuaternion< T > operator* (const BasicDualQuaternion< T > &dual_quaternion, T scalar)
 
constexpr BasicDualQuaternion< T > operator* (const BasicDualQuaternion< T > &dual_quaternion, const BasicDual< T > &dual_scalar)
 
constexpr BasicDualQuaternion< T > operator* (const BasicDualQuaternion< T > &left_side, const BasicDualQuaternion< T > &right_side)
 
constexpr BasicDualQuaternion< T > operator/ (const BasicDualQuaternion< T > &dual_quaternion, const BasicDual< T > &dual_scalar)
 
Check
template<std::floating_point OT = float>
bool check_if_equal (const BasicDualQuaternion< T > &input, const BasicDualQuaternion< T > &near_to, OT tolerance=OT{0.0002})
 
template<std::floating_point OT = float>
bool check_if_not_equal (const BasicDualQuaternion< T > &input, const BasicDualQuaternion< T > &near_to, OT tolerance=OT{0.0002})
 
Assert
template<std::floating_point OT = float>
void CHECK_IF_EQUAL (const BasicDualQuaternion< T > &input, const BasicDualQuaternion< T > &near_to, OT tolerance=OT{0.0002})
 
template<std::floating_point OT = float>
void CHECK_IF_NOT_EQUAL (const BasicDualQuaternion< T > &input, const BasicDualQuaternion< T > &near_to, OT tolerance=OT{0.0002})
 
template<std::floating_point OT = float>
void CHECK_IF_ZERO (const BasicDualQuaternion< T > &input, OT tolerance=OT{0.0002})
 
Global Functions
constexpr BasicDualQuaternion< T > normalized (const BasicDualQuaternion< T > &input)
 
template<std::floating_point OT = float>
constexpr BasicDualQuaternion< T > blend (const BasicDualQuaternion< T > &beginning, const BasicDualQuaternion< T > &end, OT percentage)
 
constexpr BasicDualQuaternion< T > conjugate (const BasicDualQuaternion< T > &input)
 
std::string format (const BasicDualQuaternion< T > &input)
 

Related Symbols

(Note that these are not member symbols.)

Type Aliases
using DualQuaternionf = BasicDualQuaternion< float >
 
using DualQuaterniond = BasicDualQuaternion< double >
 
using DualQuaternion = BasicDualQuaternion< double >
 
using DualQuaternionl = BasicDualQuaternion< long double >
 

Detailed Description

template<class T>
class Math::BasicDualQuaternion< T >

The definition of a DualQuaternion

Here, we just compose the ideas of the BasicDual and BasicQuaternion classes together to create a DualQuaternion class.

See also
BasicDual
BasicQuaternion

Definition at line 31 of file DualQuaternion.hpp.

Member Typedef Documentation

◆ value_type

template<class T >
using value_type = T

The underlying implementation type.

Definition at line 37 of file DualQuaternion.hpp.

Constructor & Destructor Documentation

◆ BasicDualQuaternion() [1/5]

template<class T >
BasicDualQuaternion ( )
default

◆ BasicDualQuaternion() [2/5]

template<class T >
constexpr BasicDualQuaternion ( const BasicQuaternion< T > &  rotation,
const BasicQuaternion< T > &  translation 
)
inlineconstexpr

Constructs a DualQuaternion directly from the two given quaternions

Parameters
rotationThe Quaternion to place into the real() part
translationThe Quaternion to place into the dual() part
Note
The user takes full responsibility for the input. This could possibly be used to construct a non-unit DualQuaternion!

Definition at line 53 of file DualQuaternion.hpp.

◆ BasicDualQuaternion() [3/5]

template<class T >
constexpr BasicDualQuaternion ( const BasicQuaternion< T > &  rotation,
T  translation_x,
T  translation_y,
T  translation_z 
)
inlineconstexpr

Constructs a DualQuaternion from a unit Quaternion (rotation) and a translation

Note
This is the proper way to construct a unit DualQuaternion.

Definition at line 64 of file DualQuaternion.hpp.

◆ BasicDualQuaternion() [4/5]

template<class T >
constexpr BasicDualQuaternion ( const BasicQuaternion< T > &  rotation,
const BasicVector3D< T > &  translation 
)
inlineconstexpr

Definition at line 74 of file DualQuaternion.hpp.

◆ BasicDualQuaternion() [5/5]

template<class T >
constexpr BasicDualQuaternion ( const BasicDual< BasicQuaternion< T > > &  underlying_representation)
inlineexplicitconstexpr

Constructs a DualQuaternion directly from a BasicDual<BasicQuaternion>

Parameters
underlying_representationThe BasicDual number that will ultimately be used as the internal representation

Definition at line 87 of file DualQuaternion.hpp.

Member Function Documentation

◆ conjugate()

template<class T >
constexpr BasicDualQuaternion< T > conjugate ( ) const
inlineconstexpr

Create the conjugate of a DualQuaternion

Returns
the conjugate of this object
Note
This is a bit different from the definition of a conjugate for a Dual, in that the conjugate of a Dual is just { real, dual.conjugate() }, while for a DualQuaternion the operation needs to be { real.conjugate(), dual.conjugate() }.

Definition at line 216 of file DualQuaternion.hpp.

◆ decode_point()

template<class T >
static constexpr BasicVector3D< T > decode_point ( const BasicDualQuaternion< T > &  encoded_point)
inlinestaticconstexpr

Definition at line 202 of file DualQuaternion.hpp.

◆ dual()

template<class T >
const BasicQuaternion< T > & dual ( ) const
inline

Definition at line 269 of file DualQuaternion.hpp.

◆ encode_point()

template<class T >
static constexpr BasicDualQuaternion< T > encode_point ( const BasicVector3D< T > &  point)
inlinestaticconstexpr

Definition at line 196 of file DualQuaternion.hpp.

◆ identity()

template<class T >
static constexpr BasicDualQuaternion< T > identity ( )
inlinestaticconstexpr

Create a DualQuaternion representing no rotation and no translation

Returns
A DualQuaternion representing no rotation or translation

Definition at line 102 of file DualQuaternion.hpp.

◆ is_unit()

template<class T >
constexpr bool is_unit ( ) const
inlineconstexpr

Checks if a DualQuaternion is a "unit" representation

Returns
true if it is in unit form, false otherwise

Definition at line 315 of file DualQuaternion.hpp.

◆ isInf()

template<class T >
bool isInf ( ) const
inline

Definition at line 324 of file DualQuaternion.hpp.

◆ isNaN()

template<class T >
bool isNaN ( ) const
inline

Definition at line 323 of file DualQuaternion.hpp.

◆ magnitude()

template<class T >
constexpr BasicDual< T > magnitude ( ) const
inlineconstexpr

Creates the magnitude of a DualQuaternion

Returns
A Dual that is the magnitude of the object
See also
norm

Definition at line 263 of file DualQuaternion.hpp.

◆ make_coordinate_system()

template<class T >
static constexpr BasicDualQuaternion< T > make_coordinate_system ( const BasicQuaternion< T > &  rotation,
T  translation_x,
T  translation_y,
T  translation_z 
)
inlinestaticconstexpr

Encode both the rotation and translation together

Parameters
rotationThe rotation to inject
translation_xThe X component of the translation vector
translation_yThe Y component of the translation vector
translation_zThe Z component of the translation vector
Returns
A DualQuaternion containing both the rotation and translation
Precondition
rotation is a unit BasicQuaternion
Postcondition
result.real == rotation. result.dual.isPure()

Definition at line 186 of file DualQuaternion.hpp.

◆ make_rotation()

template<class T >
static constexpr BasicDualQuaternion< T > make_rotation ( const BasicQuaternion< T > &  rotation)
inlinestaticconstexpr

Creates a DualQuaternion containing a rotation only

Parameters
rotationThe rotation to apply, expressed as a Quaternion
Returns
A DualQuaternion representing a rotation only
Precondition
rotation is a unit Quaternion
Postcondition
result.real == rotation. result.dual == BasicQuaternion::zero()

Definition at line 129 of file DualQuaternion.hpp.

◆ make_translation() [1/2]

template<class T >
static constexpr BasicDualQuaternion< T > make_translation ( const BasicVector3D< T > &  translation)
inlinestaticconstexpr

Create a DualQuaternion containing a translation only

Parameters
translationThe translation to apply
Returns
A DualQuaternion representing a translation only
Postcondition
result.real == BasicQuaternion::identity() result.dual.isPure()

Definition at line 164 of file DualQuaternion.hpp.

◆ make_translation() [2/2]

template<class T >
static constexpr BasicDualQuaternion< T > make_translation ( T  translation_x,
T  translation_y,
T  translation_z 
)
inlinestaticconstexpr

Create a DualQuaternion containing a translation only

Parameters
translation_xThe X component of the translation vector
translation_yThe Y component of the translation vector
translation_zThe Z component of the translation vector
Returns
A DualQuaternion representing a translation only
Postcondition
result.real == BasicQuaternion::identity() result.dual.isPure()

Definition at line 146 of file DualQuaternion.hpp.

◆ norm()

template<class T >
constexpr BasicDual< T > norm ( ) const
inlineconstexpr

Create the norm of a DualQuaternion

Returns
A Dual that is the norm of the object
Note
The norm is also known as the magnitude

Definition at line 252 of file DualQuaternion.hpp.

◆ normalized()

template<class T >
constexpr BasicDualQuaternion< T > normalized ( ) const
inlineconstexpr

Create the normalized version of a DualQuaternion

Returns
A DualQuaternion that is the normalized version of the object
See also
norm

Definition at line 284 of file DualQuaternion.hpp.

◆ normsquared()

template<class T >
constexpr BasicDual< T > normsquared ( ) const
inlineconstexpr

Create the square of the norm of the input

Returns
A Dual that is the square of the norm of this object
Note
The norm is also known as the magnitude

Definition at line 227 of file DualQuaternion.hpp.

◆ real()

template<class T >
const BasicQuaternion< T > & real ( ) const
inline

Definition at line 268 of file DualQuaternion.hpp.

◆ rotation()

template<class T >
const BasicQuaternion< T > & rotation ( ) const
inline

Definition at line 272 of file DualQuaternion.hpp.

◆ rotation_and_translation_are_orthogonal()

template<class T >
constexpr bool rotation_and_translation_are_orthogonal ( ) const
inlineconstexpr

Checks if a DualQuaternion has orthogonal rotation and translation axes

Returns
true if they are orthogonal, false otherwise
Note
This is part of the definition of a unit DualQuaternion

Definition at line 306 of file DualQuaternion.hpp.

◆ rotation_magnitude_is_one()

template<class T >
constexpr bool rotation_magnitude_is_one ( ) const
inlineconstexpr

Checks for a DualQuaternion's rotation component has a magnitude of one

Returns
true of the magnitude of the rotation is 1, false otherwise
Note
This is part of the definition of a unit DualQuaternion

Definition at line 295 of file DualQuaternion.hpp.

◆ translation()

template<class T >
BasicVector3D< T > translation ( ) const
inline

Definition at line 273 of file DualQuaternion.hpp.

◆ zero()

template<class T >
static constexpr BasicDualQuaternion< T > zero ( )
inlinestaticconstexpr

Create a DualQuaternion that is all zeros

Definition at line 110 of file DualQuaternion.hpp.

Friends And Related Symbol Documentation

◆ approximately_equal_to

template<class T >
constexpr bool approximately_equal_to ( const BasicDualQuaternion< T > &  value_to_test,
const BasicDualQuaternion< T > &  value_it_should_be,
T  tolerance = T{0.0002} 
)
friend

Compares two BasicDualQuaternion inputs equal, component-wise, to within a tolerance

Parameters
value_to_test
value_it_should_be
toleranceHow close they should be to be considered equal
Returns
true if they are equal
See also
Equality

Definition at line 361 of file DualQuaternion.hpp.

◆ blend

template<class T >
template<std::floating_point OT = float>
constexpr BasicDualQuaternion< T > blend ( const BasicDualQuaternion< T > &  beginning,
const BasicDualQuaternion< T > &  end,
OT  percentage 
)
friend

Generates a linear blend between two BasicDualQuaternion objects

Parameters
beginningThe start state
endThe ending state
percentageThe percentage blend between the two (typically [0..1])

Definition at line 598 of file DualQuaternion.hpp.

◆ conjugate

template<class T >
constexpr BasicDualQuaternion< T > conjugate ( const BasicDualQuaternion< T > &  input)
friend

Computes the conjugate of the input

Note
This will just call input.conjugate()

Definition at line 611 of file DualQuaternion.hpp.

◆ format

template<class T >
std::string format ( const BasicDualQuaternion< T > &  input)
friend

Definition at line 616 of file DualQuaternion.hpp.

◆ normalized

template<class T >
constexpr BasicDualQuaternion< T > normalized ( const BasicDualQuaternion< T > &  input)
friend

Creates the normalized form of a BasicDualQuaternion

Parameters
inputThe BasicDualQuaternion to normalize
Returns
The normalized version of input

Definition at line 586 of file DualQuaternion.hpp.

◆ operator==

template<class T >
constexpr bool operator== ( const BasicDualQuaternion< T > &  left,
const BasicDualQuaternion< T > &  right 
)
friend

Defines equality of two DualQuaternions

Note
Uses approximately_equal_to under-the-hood
Use C++20's ability to generate the operator !=() from operator ==()
See also
Equality

Definition at line 344 of file DualQuaternion.hpp.


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