00001
00002
00012
00013
00014 #if (_MSC_VER > 1000) || defined(SGI_COMPILER)
00015 #pragma once
00016 #endif
00017
00018
00019
00020
00021
00022 #ifndef _ROTMAT_H_
00023 #define _ROTMAT_H_
00024
00025
00026
00027
00028
00029 #include "SIBCMathLib.h"
00030
00031
00032
00033
00034
00052 class XSICOREEXPORT CSIBCRotMatd : private CSIBCMatrix33d
00053 {
00054
00055 public:
00056
00057
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
00105 ~CSIBCRotMatd();
00106
00107
00108
00109
00110
00117 double Get( const int in_nRow, const int in_nCol ) const;
00118
00119
00120
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
00166
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
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
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
00391 protected:
00392
00393
00394 private:
00395
00396
00397 CSIBCRotMatd( const CSIBCRotMatd& in_mat );
00398 CSIBCRotMatd& operator =( const CSIBCRotMatd& in_mat );
00399 };
00400
00401
00402 #endif