#ifndef INCLUDE_Quaternion #define INCLUDE_Quaternion #include #include #include using namespace std; typedef std::complex Complex; class Quaternion{ private: Complex alpha,beta; public: Quaternion( double r , double i1 = 0 , double i2 = 0 , double i3 = 0 ) : alpha( r , i1 ) , beta( i2 , i3 ) {} Quaternion( Complex c1 , Complex c2 = 0 ) : alpha( c1 ) , beta( c2 ) {} Quaternion( ) : alpha( 0 , 0 ) , beta( 0 , 0 ) {} bool operator==( const Quaternion & c ) const ; bool operator!=( const Quaternion & c ) const ; Quaternion & operator=( const Quaternion & c ) ; Quaternion & operator+=( const Quaternion & c ) ; Quaternion & operator-=( const Quaternion & c ) ; Quaternion & operator*=( const Quaternion & c ) ; Quaternion & operator/=( const Quaternion & c ) ; double real( ) const { return alpha.real() ; } double imag( int i ) const ; Quaternion operator + ( ) const { return *this ; } Quaternion operator + ( Quaternion c ) const ; Quaternion operator - ( ) const ; Quaternion operator - ( Quaternion c ) const ; Quaternion operator * ( Quaternion c ) const ; Quaternion operator / ( Quaternion c ) const ; Quaternion conj( ) const ; double abs() const ; double norm() const ; }; std::ostream &operator<<(std::ostream & , const Quaternion & ); #endif