Quaternion.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. /******************************************************************************
  2. Use 'Quaternion' for optional rotation representation.
  3. /******************************************************************************/
  4. STRUCT(Quaternion , Vec4)
  5. //{
  6. Quaternion& operator*=( Flt f);
  7. Quaternion& operator*=(C Quaternion &q) {return mul(q);}
  8. // transform
  9. void mul (C Quaternion &q, Quaternion &dest)C; // multiply by 'q' and store result in 'dest'
  10. Quaternion& mul (C Quaternion &q ) {mul(q, T); return T;} // multiply by 'q'
  11. void inverse ( Quaternion &dest )C; // inverse to 'dest'
  12. Quaternion& inverse ( ) {inverse(T); return T;} // inverse
  13. Quaternion& identity( ) {set(0, 0, 0, 1); return T;} // set identity
  14. Quaternion& setRotateX( Flt angle); // set x rotated identity
  15. Quaternion& setRotateY( Flt angle); // set y rotated identity
  16. Quaternion& setRotateZ( Flt angle); // set z rotated identity
  17. Quaternion& setRotate (Flt x, Flt y, Flt z ); // set x-y-z rotated identity
  18. Quaternion& setRotate (C Vec &axis , Flt angle); // set axis rotated identity
  19. // get
  20. Flt angle()C; // get rotation angle
  21. Vec axis ()C; // get rotation axis
  22. Quaternion() {}
  23. Quaternion(C Vec4 &v) : Vec4(v) {}
  24. Quaternion(C Matrix3 &m);
  25. };
  26. /******************************************************************************/
  27. Quaternion GetTangent(C Quaternion &prev, C Quaternion &cur, C Quaternion &next); // get tangent
  28. Quaternion Slerp(C Quaternion &a , C Quaternion &b , Flt step); // spherical linear interpolation, 'step'=0..1
  29. Quaternion Squad(C Quaternion &from, C Quaternion &to, C Quaternion &tan0, C Quaternion &tan1, Flt step); // spherical quadrangle interpolation, 'step'=0..1
  30. /******************************************************************************/