⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 quater.h

📁 basic mathematic classes used for math programming
💻 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 + -