📄 quater.h
字号:
#ifndef QUATER_H#define QUATER_Hclass vector;class quater{ private: m_real p[4]; // negation friend quater operator-( quater const& ); // addtion friend quater operator+( quater const&, quater const& ); // subtraction friend quater operator-( quater const&, quater const& ); // dot product friend m_real operator%( quater const&, quater const& ); // Multiplication friend quater operator*( quater const&, quater const& ); // scalar Multiplication friend quater operator*( quater const&, m_real ); friend quater operator*( m_real, quater const& ); // scalar Division friend quater operator/( quater const&, m_real );
// transform with matrix
matrix getMatrix();
void setMatrix( matrix const& );
friend matrix Quater2Matrix( quater const& ); friend quater Matrix2Quater( matrix const& ); friend vector Quater2EulerAngle( quater const& ); friend quater EulerAngle2Quater( vector const& ); // functions friend quater exp( vector const& ); friend quater pow( vector const&, m_real ); friend quater inverse( quater const& ); friend m_real len( quater const& ); friend vector ln ( quater const& ); friend position rotate( quater const&, position const& ); friend vector rotate( quater const&, vector const& ); friend unit_vector rotate( quater const&, unit_vector const& ); friend quater slerp( quater const&, quater const&, m_real ); friend quater interpolate( m_real, quater const&, quater const& ); friend m_real distance( quater const&, quater const& ); friend vector difference( quater const&, quater const& );
//double operation in Ken Shoemake's spherical Bezier curves ,a and b should be unit quaternion
friend quater doublequater(quater const&, quater const&);
friend quater doublequaterk(quater const&, quater const&, m_real); // with k to adjust the quality
//bisect operation in Ken Shoemake's spherical Bezier curves ,a and b should be unit quaternion
friend quater bisect(quater const& , quater const&);
// return the quaternion which is close to the first quaternion
friend quater closetofirst(quater const&, quater const &);
// De Casteluau interpolation for Bezier curves.
friend quater decasteljau(quater const&, quater const&,quater const&, quater const&,m_real);
friend vector decasteljaup(vector const& q1, vector const& q2,vector const& q3, vector const& q4,m_real t); // stream friend ostream& operator<<( ostream&, quater const& ); friend istream& operator>>( istream&, quater& );
public: // // constructors // quater() {};
quater(const quater& qua); quater( m_real w, m_real x, m_real y, m_real z ) { p[0]=w; p[1]=x; p[2]=y; p[3]=z; } quater( m_real a[4] ) { p[0]=a[0]; p[1]=a[1]; p[2]=a[2]; p[3]=a[3]; } // // inquiry functions // m_real real() const { return p[0]; } vector imaginaries() const { return vector( p[1], p[2], p[3] ); } quater inverse() const { return quater( p[0], -p[1], -p[2], -p[3] ); } quater normalize() const; m_real length() const; m_real& operator[] (int i) { return p[i]; }
quater& operator=(const quater& qua); void getValue( m_real d[4] ) { d[0]=p[0]; d[1]=p[1]; d[2]=p[2]; d[2]=p[2]; } void setValue( m_real d[4] ) { p[0]=d[0]; p[1]=d[1]; p[2]=d[2]; p[2]=d[2]; } m_real w() const { return p[0]; } m_real x() const { return p[1]; } m_real y() const { return p[2]; } m_real z() const { return p[3]; } // // Set parameters // void set_w( m_real x ) { p[0]=x; } void set_x( m_real x ) { p[1]=x; } void set_y( m_real x ) { p[2]=x; } void set_z( m_real x ) { p[3]=x; }};#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -