24#ifndef vtkQuaternion_h 
   25#define vtkQuaternion_h 
   29VTK_ABI_NAMESPACE_BEGIN
 
  160  void Set(
const T& w, 
const T& x, 
const T& y, 
const T& z);
 
  162  void Get(T quat[4]) 
const;
 
  210  template <
typename CastTo>
 
  290#define vtkQuaternionIdentity(quaternionType, type)                                                \ 
  291  quaternionType Identity() const                                                                  \ 
  293    return quaternionType(vtkQuaternion<type>::Identity().GetData());                              \ 
  295#define vtkQuaternionNormalized(quaternionType, type)                                              \ 
  296  quaternionType Normalized() const                                                                \ 
  298    return quaternionType(vtkQuaternion<type>::Normalized().GetData());                            \ 
  300#define vtkQuaternionConjugated(quaternionType, type)                                              \ 
  301  quaternionType Conjugated() const                                                                \ 
  303    return quaternionType(vtkQuaternion<type>::Conjugated().GetData());                            \ 
  305#define vtkQuaternionInverse(quaternionType, type)                                                 \ 
  306  quaternionType Inverse() const                                                                   \ 
  308    return quaternionType(vtkQuaternion<type>::Inverse().GetData());                               \ 
  310#define vtkQuaternionUnitLog(quaternionType, type)                                                 \ 
  311  quaternionType UnitLog() const                                                                   \ 
  313    return quaternionType(vtkQuaternion<type>::UnitLog().GetData());                               \ 
  315#define vtkQuaternionUnitExp(quaternionType, type)                                                 \ 
  316  quaternionType UnitExp() const                                                                   \ 
  318    return quaternionType(vtkQuaternion<type>::UnitExp().GetData());                               \ 
  320#define vtkQuaternionNormalizedWithAngleInDegrees(quaternionType, type)                            \ 
  321  quaternionType NormalizedWithAngleInDegrees() const                                              \ 
  323    return quaternionType(vtkQuaternion<type>::NormalizedWithAngleInDegrees().GetData());          \ 
  325#define vtkQuaternionSlerp(quaternionType, type)                                                   \ 
  326  quaternionType Slerp(type t, const quaternionType& q) const                                      \ 
  328    return quaternionType(vtkQuaternion<type>::Slerp(t, q).GetData());                             \ 
  330#define vtkQuaternionInnerPoint(quaternionType, type)                                              \ 
  331  quaternionType InnerPoint(const quaternionType& q1, const quaternionType& q2) const              \ 
  333    return quaternionType(vtkQuaternion<type>::InnerPoint(q1, q2).GetData());                      \ 
  335#define vtkQuaternionOperatorPlus(quaternionType, type)                                            \ 
  336  inline quaternionType operator+(const quaternionType& q) const                                   \ 
  338    return quaternionType(                                                                         \ 
  339      (static_cast<vtkQuaternion<type>>(*this) + static_cast<vtkQuaternion<type>>(q)).GetData());  \ 
  341#define vtkQuaternionOperatorMinus(quaternionType, type)                                           \ 
  342  inline quaternionType operator-(const quaternionType& q) const                                   \ 
  344    return quaternionType(                                                                         \ 
  345      (static_cast<vtkQuaternion<type>>(*this) - static_cast<vtkQuaternion<type>>(q)).GetData());  \ 
  347#define vtkQuaternionOperatorMultiply(quaternionType, type)                                        \ 
  348  inline quaternionType operator*(const quaternionType& q) const                                   \ 
  350    return quaternionType(                                                                         \ 
  351      (static_cast<vtkQuaternion<type>>(*this) * static_cast<vtkQuaternion<type>>(q)).GetData());  \ 
  353#define vtkQuaternionOperatorMultiplyScalar(quaternionType, type)                                  \ 
  354  inline quaternionType operator*(const type& scalar) const                                        \ 
  356    return quaternionType((static_cast<vtkQuaternion<type>>(*this) * scalar).GetData());           \ 
  358#define vtkQuaternionOperatorDivide(quaternionType, type)                                          \ 
  359  inline quaternionType operator/(const quaternionType& q) const                                   \ 
  361    return quaternionType(                                                                         \ 
  362      (static_cast<vtkQuaternion<type>>(*this) / static_cast<vtkQuaternion<type>>(q)).GetData());  \ 
  364#define vtkQuaternionOperatorDivideScalar(quaternionType, type)                                    \ 
  365  inline quaternionType operator/(const type& scalar) const                                        \ 
  367    return quaternionType((static_cast<vtkQuaternion<type>>(*this) / scalar).GetData());           \ 
  370#define vtkQuaternionOperatorMacro(quaternionType, type)                                           \ 
  371  vtkQuaternionIdentity(quaternionType, type);                                                     \ 
  372  vtkQuaternionNormalized(quaternionType, type);                                                   \ 
  373  vtkQuaternionConjugated(quaternionType, type);                                                   \ 
  374  vtkQuaternionInverse(quaternionType, type);                                                      \ 
  375  vtkQuaternionUnitLog(quaternionType, type);                                                      \ 
  376  vtkQuaternionUnitExp(quaternionType, type);                                                      \ 
  377  vtkQuaternionNormalizedWithAngleInDegrees(quaternionType, type);                                 \ 
  378  vtkQuaternionSlerp(quaternionType, type);                                                        \ 
  379  vtkQuaternionInnerPoint(quaternionType, type);                                                   \ 
  380  vtkQuaternionOperatorPlus(quaternionType, type);                                                 \ 
  381  vtkQuaternionOperatorMinus(quaternionType, type);                                                \ 
  382  vtkQuaternionOperatorMultiply(quaternionType, type);                                             \ 
  383  vtkQuaternionOperatorMultiplyScalar(quaternionType, type);                                       \ 
  384  vtkQuaternionOperatorDivide(quaternionType, type);                                               \ 
  385  vtkQuaternionOperatorDivideScalar(quaternionType, type) 
  438#include "vtkQuaternion.txx" 
templated base type for storage of quaternions.
 
static vtkQuaternion< T > Identity()
Return the identity quaternion.
 
void SetRotationAngleAndAxis(T angle, T axis[3])
Set/Get the angle (in radians) and the axis corresponding to the axis-angle rotation of this quaterni...
 
vtkQuaternion(const T &scalar)
Initialize all of the quaternion's elements with the supplied scalar.
 
void SetX(const T &x)
Set/Get the x component of the quaternion, i.e.
 
void Set(T quat[4])
Set/Get the w, x, y and z components of the quaternion.
 
void SetZ(const T &z)
Set/Get the y component of the quaternion, i.e.
 
vtkQuaternion< T > operator+(const vtkQuaternion< T > &q) const
Performs addition of quaternion of the same basic type.
 
vtkQuaternion< T > Conjugated() const
Return the conjugate form of this quaternion.
 
void ToUnitExp()
Convert this quaternion to a unit exponential quaternion.
 
void SetRotationAngleAndAxis(const T &angle, const T &x, const T &y, const T &z)
Set/Get the angle (in radians) and the axis corresponding to the axis-angle rotation of this quaterni...
 
void SetW(const T &w)
Set/Get the w component of the quaternion, i.e.
 
const T & GetX() const
Set/Get the x component of the quaternion, i.e.
 
T Norm() const
Get the norm of the quaternion, i.e.
 
vtkQuaternion< T > UnitLog() const
Return the unit log version of this quaternion.
 
void SetY(const T &y)
Set/Get the y component of the quaternion, i.e.
 
const T & GetZ() const
Set/Get the y component of the quaternion, i.e.
 
void operator/=(const T &scalar)
Performs in place division of the quaternions by a scalar value.
 
void ToMatrix3x3(T A[3][3]) const
Convert a quaternion to a 3x3 rotation matrix.
 
vtkQuaternion(const T *init)
Initialize the quaternion's elements with the elements of the supplied array.
 
vtkQuaternion< T > Slerp(T t, const vtkQuaternion< T > &q) const
Interpolate quaternions using spherical linear interpolation between this quaternion and q1 to produc...
 
vtkQuaternion< CastTo > Cast() const
Cast the quaternion to the specified type and return the result.
 
void Invert()
Invert the quaternion in place.
 
void Get(T quat[4]) const
Set/Get the w, x, y and z components of the quaternion.
 
vtkQuaternion< T > operator/(const T &scalar) const
Performs division of the quaternions by a scalar value.
 
void Set(const T &w, const T &x, const T &y, const T &z)
Set/Get the w, x, y and z components of the quaternion.
 
void operator*=(const T &scalar) const
Performs in place multiplication of the quaternions by a scalar value.
 
vtkQuaternion(const T &w, const T &x, const T &y, const T &z)
Initialize the quaternion element explicitly.
 
vtkQuaternion< T > operator-(const vtkQuaternion< T > &q) const
Performs subtraction of quaternions of the same basic type.
 
T SquaredNorm() const
Get the squared norm of the quaternion.
 
T Normalize()
Normalize the quaternion in place.
 
vtkQuaternion< T > operator/(const vtkQuaternion< T > &q) const
Performs division of quaternions of the same type.
 
vtkQuaternion< T > UnitExp() const
Return the unit exponential version of this quaternion.
 
T GetRotationAngleAndAxis(T axis[3]) const
Set/Get the angle (in radians) and the axis corresponding to the axis-angle rotation of this quaterni...
 
void ToUnitLog()
Convert this quaternion to a unit log quaternion.
 
void FromMatrix3x3(const T A[3][3])
Convert a 3x3 matrix into a quaternion.
 
vtkQuaternion< T > operator*(const T &scalar) const
Performs multiplication of the quaternions by a scalar value.
 
void Conjugate()
Conjugate the quaternion in place.
 
vtkQuaternion< T > InnerPoint(const vtkQuaternion< T > &q1, const vtkQuaternion< T > &q2) const
Interpolates between quaternions, using spherical quadrangle interpolation.
 
vtkQuaternion< T > operator*(const vtkQuaternion< T > &q) const
Performs multiplication of quaternion of the same basic type.
 
void ToIdentity()
Set the quaternion to identity in place.
 
vtkQuaternion< T > Inverse() const
Return the inverted form of this quaternion.
 
void NormalizeWithAngleInDegrees()
Normalize a quaternion in place and transform it to so its angle is in degrees and its axis normalize...
 
vtkQuaternion()
Default constructor.
 
vtkQuaternion< T > Normalized() const
Return the normalized form of this quaternion.
 
vtkQuaternion< T > NormalizedWithAngleInDegrees() const
Returns a quaternion normalized and transformed so its angle is in degrees and its axis normalized.
 
const T & GetY() const
Set/Get the y component of the quaternion, i.e.
 
const T & GetW() const
Set/Get the w component of the quaternion, i.e.
 
vtkQuaterniond(double w, double x, double y, double z)
 
vtkQuaternionOperatorMacro(vtkQuaterniond, double)
 
vtkQuaterniond(const double *init)
 
vtkQuaterniond(double scalar)
 
vtkQuaternionf(float scalar)
 
vtkQuaternionf(const float *init)
 
vtkQuaternionOperatorMacro(vtkQuaternionf, float)
 
vtkQuaternionf(float w, float x, float y, float z)
 
templated base type for containers of constant size.