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.