SIBCRotMatd.h

Go to the documentation of this file.
00001 //***************************************************************************************
00002 // File supervisor: Crosswalk team
00012 //***************************************************************************************
00013 
00014 #if (_MSC_VER > 1000) || defined(SGI_COMPILER)
00015 #pragma once
00016 #endif
00017 
00018 //******************************************************************************
00019 // Defines
00020 //******************************************************************************
00021 
00022 #ifndef _ROTMAT_H_
00023 #define _ROTMAT_H_
00024 
00025 //******************************************************************************
00026 // Includes
00027 //******************************************************************************
00028 
00029 #include "SIBCMathLib.h"
00030 
00031 //******************************************************************************
00032 // CSIBCRotMatd | 3X3 rotation matrix.
00033 //******************************************************************************
00034 
00052 class XSICOREEXPORT CSIBCRotMatd : private CSIBCMatrix33d
00053 {
00054     // Public members
00055     public:
00056         //****************************************
00057         // Constructors/Destructor
00058         //****************************************
00059 
00065         CSIBCRotMatd( void );
00066 
00079         CSIBCRotMatd(   const CSIBCVector3Dd& in_vct0,
00080                         const CSIBCVector3Dd& in_vct1,
00081                         const CSIBCVector3Dd& in_vct2,
00082                         const bool in_bAreRows = true );
00083 
00099         CSIBCRotMatd(
00100             const double in_dA00, const double in_dA01, const double in_dA02,
00101             const double in_dA10, const double in_dA11, const double in_dA12,
00102             const double in_dA20, const double in_dA21, const double in_dA22 );
00103 
00104         // Destructor.
00105         ~CSIBCRotMatd();
00106 
00107         //****************************************
00108         // General access functions:
00109         //****************************************
00110 
00117         double Get( const int in_nRow, const int in_nCol ) const;
00118 
00119         //****************************************
00120         // Matrix element modification functions:
00121         //****************************************
00122 
00133         CSIBCRotMatd& Set( int in_nRow, int in_nCol, const double in_dVal );
00134 
00143         CSIBCRotMatd& Set( double in_dVal[3][3] );
00144 
00153         CSIBCRotMatd& Set( const CSIBCMatrix33d& in_mat );
00154 
00163         CSIBCRotMatd& Set( const CSIBCRotMatd& in_mat );
00164 
00165         // @member Set  | Set rotation from one of the main axes
00166         //                  (X, Y or Z) and an angle.
00173         CSIBCRotMatd& Set( const E3DAxisType in_axis, const double in_dAngle );
00174 
00184         CSIBCRotMatd& SetRow( const int in_nRow, const CSIBCVector3Dd& in_vct );
00185 
00196         CSIBCRotMatd& SetRow( const int in_nRow, double in_dA0, double in_dA1, double in_dA2 );
00197 
00207         CSIBCRotMatd& SetCol( const int in_nCol, const CSIBCVector3Dd& in_vct );
00208 
00219         CSIBCRotMatd& SetCol( const int in_nCol, double in_dA0, double in_dA1, double in_dA2 );
00220 
00226         CSIBCRotMatd& SetNull();
00227 
00233         CSIBCRotMatd& SetIdentity( void );
00234 
00235 
00236         //****************************************
00237         // Matrix comparison functions:
00238         //****************************************
00239 
00251         friend bool AreAlmostEqual( const CSIBCRotMatd& in_mat1,
00252                                 const CSIBCRotMatd& in_mat2,
00253                                 const double in_dEpsilon = PICO_EPS );
00254 
00255 
00264         bool operator ==( const CSIBCMatrix33d & in_mat ) const;
00265 
00274         bool operator !=( const CSIBCMatrix33d & in_mat ) const;
00275 
00276         //****************************************
00277         // Matrix algebra functions:
00278         //****************************************
00279 
00290         CSIBCRotMatd& Mul( const CSIBCRotMatd& in_mat1, const CSIBCRotMatd& in_mat2 );
00291 
00301         CSIBCRotMatd& Mul( const CSIBCRotMatd& in_mat );
00302 
00313         CSIBCRotMatd& MulTransByReg( const CSIBCRotMatd& in_mat1,
00314                                    const CSIBCRotMatd& in_mat2 );
00315 
00326         CSIBCRotMatd& MulRegByTrans( const CSIBCRotMatd& in_mat1,
00327                                    const CSIBCRotMatd& in_mat2 );
00328 
00335         CSIBCRotMatd& Negate( const CSIBCRotMatd& in_mat );
00336 
00342         CSIBCRotMatd& Negate();
00343 
00349         double GetDet( void ) const;
00350 
00355         double GetTrace( void ) const;
00356 
00364         CSIBCRotMatd& Transpose( const CSIBCRotMatd& in_mat );
00365 
00371         CSIBCRotMatd& Transpose( void );
00372 
00380         CSIBCRotMatd& Invert( const CSIBCRotMatd& in_mat );
00381 
00388         CSIBCRotMatd& Invert( void );
00389 
00390     // Protected members
00391     protected:
00392 
00393     // Private members
00394     private:
00395 
00396         // Disable copy constructor and operator =
00397         CSIBCRotMatd( const CSIBCRotMatd& in_mat );
00398         CSIBCRotMatd& operator =( const CSIBCRotMatd& in_mat );
00399 };
00400 
00401 
00402 #endif