 |
VTK
9.1.0
|
Go to the documentation of this file.
33 #ifndef vtkQuaternion_h
34 #define vtkQuaternion_h
168 void Set(
const T& w,
const T& x,
const T& y,
const T& z);
170 void Get(T quat[4])
const;
218 template <
typename CastTo>
298 #define vtkQuaternionIdentity(quaternionType, type) \
299 quaternionType Identity() const \
301 return quaternionType(vtkQuaternion<type>::Identity().GetData()); \
303 #define vtkQuaternionNormalized(quaternionType, type) \
304 quaternionType Normalized() const \
306 return quaternionType(vtkQuaternion<type>::Normalized().GetData()); \
308 #define vtkQuaternionConjugated(quaternionType, type) \
309 quaternionType Conjugated() const \
311 return quaternionType(vtkQuaternion<type>::Conjugated().GetData()); \
313 #define vtkQuaternionInverse(quaternionType, type) \
314 quaternionType Inverse() const \
316 return quaternionType(vtkQuaternion<type>::Inverse().GetData()); \
318 #define vtkQuaternionUnitLog(quaternionType, type) \
319 quaternionType UnitLog() const \
321 return quaternionType(vtkQuaternion<type>::UnitLog().GetData()); \
323 #define vtkQuaternionUnitExp(quaternionType, type) \
324 quaternionType UnitExp() const \
326 return quaternionType(vtkQuaternion<type>::UnitExp().GetData()); \
328 #define vtkQuaternionNormalizedWithAngleInDegrees(quaternionType, type) \
329 quaternionType NormalizedWithAngleInDegrees() const \
331 return quaternionType(vtkQuaternion<type>::NormalizedWithAngleInDegrees().GetData()); \
333 #define vtkQuaternionSlerp(quaternionType, type) \
334 quaternionType Slerp(type t, const quaternionType& q) const \
336 return quaternionType(vtkQuaternion<type>::Slerp(t, q).GetData()); \
338 #define vtkQuaternionInnerPoint(quaternionType, type) \
339 quaternionType InnerPoint(const quaternionType& q1, const quaternionType& q2) const \
341 return quaternionType(vtkQuaternion<type>::InnerPoint(q1, q2).GetData()); \
343 #define vtkQuaternionOperatorPlus(quaternionType, type) \
344 inline quaternionType operator+(const quaternionType& q) const \
346 return quaternionType( \
347 (static_cast<vtkQuaternion<type>>(*this) + static_cast<vtkQuaternion<type>>(q)).GetData()); \
349 #define vtkQuaternionOperatorMinus(quaternionType, type) \
350 inline quaternionType operator-(const quaternionType& q) const \
352 return quaternionType( \
353 (static_cast<vtkQuaternion<type>>(*this) - static_cast<vtkQuaternion<type>>(q)).GetData()); \
355 #define vtkQuaternionOperatorMultiply(quaternionType, type) \
356 inline quaternionType operator*(const quaternionType& q) const \
358 return quaternionType( \
359 (static_cast<vtkQuaternion<type>>(*this) * static_cast<vtkQuaternion<type>>(q)).GetData()); \
361 #define vtkQuaternionOperatorMultiplyScalar(quaternionType, type) \
362 inline quaternionType operator*(const type& scalar) const \
364 return quaternionType((static_cast<vtkQuaternion<type>>(*this) * scalar).GetData()); \
366 #define vtkQuaternionOperatorDivide(quaternionType, type) \
367 inline quaternionType operator/(const quaternionType& q) const \
369 return quaternionType( \
370 (static_cast<vtkQuaternion<type>>(*this) / static_cast<vtkQuaternion<type>>(q)).GetData()); \
372 #define vtkQuaternionOperatorDivideScalar(quaternionType, type) \
373 inline quaternionType operator/(const type& scalar) const \
375 return quaternionType((static_cast<vtkQuaternion<type>>(*this) / scalar).GetData()); \
378 #define vtkQuaternionOperatorMacro(quaternionType, type) \
379 vtkQuaternionIdentity(quaternionType, type); \
380 vtkQuaternionNormalized(quaternionType, type); \
381 vtkQuaternionConjugated(quaternionType, type); \
382 vtkQuaternionInverse(quaternionType, type); \
383 vtkQuaternionUnitLog(quaternionType, type); \
384 vtkQuaternionUnitExp(quaternionType, type); \
385 vtkQuaternionNormalizedWithAngleInDegrees(quaternionType, type); \
386 vtkQuaternionSlerp(quaternionType, type); \
387 vtkQuaternionInnerPoint(quaternionType, type); \
388 vtkQuaternionOperatorPlus(quaternionType, type); \
389 vtkQuaternionOperatorMinus(quaternionType, type); \
390 vtkQuaternionOperatorMultiply(quaternionType, type); \
391 vtkQuaternionOperatorMultiplyScalar(quaternionType, type); \
392 vtkQuaternionOperatorDivide(quaternionType, type); \
393 vtkQuaternionOperatorDivideScalar(quaternionType, type)
445 #include "vtkQuaternion.txx"
447 #endif // vtkQuaternion_h
void Invert()
Invert the quaternion in place.
vtkQuaternion< T > Conjugated() const
Return the conjugate form of this quaternion.
vtkQuaternion< T > Normalized() const
Return the normalized form of this quaternion.
vtkQuaternion(const T *init)
Initialize the quaternion's elements with the elements of the supplied array.
const T & GetZ() const
Set/Get the y component of the quaternion, i.e.
vtkQuaternion< T > InnerPoint(const vtkQuaternion< T > &q1, const vtkQuaternion< T > &q2) const
Interpolates between quaternions, using spherical quadrangle interpolation.
vtkQuaternion< T > operator*(const T &scalar) const
Performs multiplication of the quaternions by a scalar value.
void ToUnitExp()
Convert this quaternion to a unit exponential quaternion.
vtkQuaternion< T > operator/(const vtkQuaternion< T > &q) const
Performs division of quaternions of the same type.
vtkQuaternion< T > Inverse() const
Return the inverted form of this quaternion.
T SquaredNorm() const
Get the squared norm of the quaternion.
vtkQuaterniond(const double *init)
void ToIdentity()
Set the quaternion to identity in place.
void Conjugate()
Conjugate the quaternion in place.
vtkQuaternion< T > operator+(const vtkQuaternion< T > &q) const
Performs addition of quaternion of the same basic type.
vtkQuaternion< T > operator/(const T &scalar) const
Performs division of the quaternions by a scalar value.
vtkQuaternionOperatorMacro(vtkQuaternionf, float)
T Norm() const
Get the norm of the quaternion, i.e.
void FromMatrix3x3(const T A[3][3])
Convert a 3x3 matrix into a 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...
vtkQuaternion< T > NormalizedWithAngleInDegrees() const
Returns a quaternion normalized and transformed so its angle is in degrees and its axis normalized.
vtkQuaternion< CastTo > Cast() const
Cast the quaternion to the specified type and return the result.
vtkQuaternion< T > operator-(const vtkQuaternion< T > &q) const
Performs subtraction of quaternions of the same basic type.
void operator/=(const T &scalar)
Performs in place division of the quaternions by a scalar value.
vtkQuaternion< T > UnitExp() const
Return the unit exponential version of this quaternion.
const T & GetY() const
Set/Get the y component of the quaternion, i.e.
static vtkQuaternion< T > Identity()
Return the identity quaternion.
void ToMatrix3x3(T A[3][3]) const
Convert a quaternion to a 3x3 rotation matrix.
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()
Default constructor.
T Normalize()
Normalize the quaternion in place.
vtkQuaternion(const T &scalar)
Initialize all of the quaternion's elements with the supplied scalar.
vtkQuaternionf(const float *init)
const T & GetX() const
Set/Get the x component of the quaternion, i.e.
templated base type for storage of quaternions.
vtkQuaternion< T > Slerp(T t, const vtkQuaternion< T > &q) const
Interpolate quaternions using spherical linear interpolation between this quaternion and q1 to produc...
vtkQuaterniond(double scalar)
void NormalizeWithAngleInDegrees()
Normalize a quaternion in place and transform it to so its angle is in degrees and its axis normalize...
vtkQuaternionOperatorMacro(vtkQuaterniond, double)
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...
void SetX(const T &x)
Set/Get the x component of the quaternion, i.e.
vtkQuaternionf(float scalar)
vtkQuaternion< T > operator*(const vtkQuaternion< T > &q) const
Performs multiplication of quaternion of the same basic type.
vtkQuaternionf(float w, float x, float y, float z)
vtkQuaterniond(double w, double x, double y, double z)
void ToUnitLog()
Convert this quaternion to a unit log quaternion.
templated base type for containers of constant size.
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 SetW(const T &w)
Set/Get the w component of the quaternion, i.e.
void operator*=(const T &scalar) const
Performs in place multiplication of the quaternions by a scalar value.
const T & GetW() const
Set/Get the w component of the quaternion, i.e.
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.
vtkQuaternion(const T &w, const T &x, const T &y, const T &z)
Initialize the quaternion element explicitly.
void SetY(const T &y)
Set/Get the y component of the quaternion, i.e.
vtkQuaternion< T > UnitLog() const
Return the unit log version of this quaternion.
void Get(T quat[4]) const
Set/Get the w, x, y and z components of the quaternion.