Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00016 #ifndef __FEULERPARA_H_
00017 #define __FEULERPARA_H_
00018
00019 #include "hrpModelExportDef.h"
00020 #include "fMatrix4.h"
00021
00028 class HRPBASE_EXPORT fEulerPara
00029 : public fVec4
00030 {
00031 public:
00033 fEulerPara() : fVec4() {
00034 }
00035 ~fEulerPara() {
00036 }
00038 fEulerPara(const fVec3& v, double s) {
00039 set(v, s);
00040 }
00042 fEulerPara(double s1, double s2, double s3, double s4) {
00043 set(s1, s2, s3, s4);
00044 }
00045
00047 friend double& Ang(fEulerPara& ep) {
00048 return ep.m_scalar;
00049 }
00051 double& Ang() {
00052 return m_scalar;
00053 }
00055 double Ang() const {
00056 return m_scalar;
00057 }
00059 friend fVec3& Axis(fEulerPara& ep) {
00060 return ep.m_vec;
00061 }
00063 fVec3& Axis() {
00064 return m_vec;
00065 }
00067 const fVec3& Axis() const {
00068 return m_vec;
00069 }
00071 fEulerPara operator= (const fEulerPara&);
00073 fEulerPara operator= (const fMat33&);
00075 void set(const fVec3& v, double s) {
00076 m_scalar = s;
00077 m_vec = v;
00078 }
00080 void set(double s1, double s2, double s3, double s4) {
00081 m_vec.set(s1, s2, s3);
00082 m_scalar = s4;
00083 }
00085 void set(const fEulerPara&);
00087 void set(const class fMat33&);
00088
00090 void identity() {
00091 m_scalar = 1.0;
00092 m_vec.zero();
00093 }
00095 void unit();
00097 friend fEulerPara unit(const fEulerPara&);
00098
00100 friend fEulerPara operator * (double, const fEulerPara&);
00102 friend fEulerPara operator - (const fEulerPara&);
00104 friend fEulerPara mat2ep(const fMat33&);
00106 friend fMat33 ep2mat(const fEulerPara&);
00107
00109
00114 void angvel2epdot(const fEulerPara& _ep, const fVec3& _omega);
00116 friend fEulerPara angvel2epdot(const fEulerPara& epara, const fVec3& vel);
00118 friend fVec3 epdot2angvel(const fEulerPara& epara, const fEulerPara& edot);
00120
00126 friend fVec3 epddot2angacc(const fEulerPara& e, const fEulerPara& de, const fEulerPara& dde);
00127
00129 void interpolate(const fEulerPara& ep1, const fEulerPara& ep2, double t);
00130
00132 double rotation(const fEulerPara& ep0, const fVec3& s);
00133
00134 };
00135
00136 #endif