Matrix.h

Go to the documentation of this file.
00001 
00002 
00008 
00011 
00012 
00013 #ifndef MATRIX_H
00014 #define MATRIX_H
00015 
00016 #include <iostream.h>
00017 #include <cammva.h>
00018 namespace O_SESSAME {
00019 
00020 const int MatrixIndexBase = 1; 
00021 const int VectorIndexBase = 1; 
00022 const int MatrixRowsIndex = 1; 
00023 const int MatrixColsIndex = 2; 
00024 typedef CAMdoubleMatrix Matrix; 
00025 typedef CAMdoubleVector Vector; 
00031 inline Matrix eye(int _rowColumns)
00032 {
00033     Matrix eyeOutput(_rowColumns,_rowColumns);
00034     eyeOutput.setToValue(0.0);
00035     for(int ii = MatrixIndexBase;ii < _rowColumns + MatrixIndexBase; ++ii)
00036         eyeOutput(ii,ii) = 1.0;
00037     return eyeOutput;
00038 }
00039 
00044 inline double trace(const Matrix &_inMatrix)
00045 {
00046     double Sum = 0;
00047     for(int ii = MatrixIndexBase;ii < _inMatrix[MatrixRowsIndex].getIndexCount() + MatrixIndexBase; ++ii)
00048         Sum += _inMatrix(ii,ii);
00049     return Sum;
00050 }
00051 
00057 inline double norm2(const Vector &_inVector)
00058 {
00059     double Sum = 0;
00060     for(int ii = VectorIndexBase;ii < _inVector.getIndexCount() + VectorIndexBase; ++ii)
00061         Sum += _inVector(ii) * _inVector(ii);
00062     return sqrt(Sum);
00063 }
00064 
00069 inline void normalize(Vector &_inVector)
00070 {
00071     _inVector /= norm2(_inVector);
00072     return;
00073 }
00074 
00080 inline double normInf(const Vector &_inVector)
00081 {
00082     return _inVector.maxAbs();
00083 }
00084 
00099 inline Matrix skew(const Vector &_inVector)
00100 {
00101     Matrix Rout(3,3);
00102     Rout.setToValue(0.0);
00103     Rout(MatrixIndexBase+0,MatrixIndexBase+1) =
00104         -_inVector(VectorIndexBase+2);
00105     Rout(MatrixIndexBase+0,MatrixIndexBase+2) =
00106         _inVector(VectorIndexBase+1);
00107     Rout(MatrixIndexBase+1,MatrixIndexBase+0) =
00108         _inVector(VectorIndexBase+2);
00109     Rout(MatrixIndexBase+1,MatrixIndexBase+2) =
00110         -_inVector(VectorIndexBase+0);
00111     Rout(MatrixIndexBase+2,MatrixIndexBase+0) =
00112         -_inVector(VectorIndexBase+1);
00113     Rout(MatrixIndexBase+2,MatrixIndexBase+1) =
00114         _inVector(VectorIndexBase+0);
00115     return Rout;
00116 }
00117 
00124 inline Vector crossP(const Vector &_v1, const Vector &_v2)
00125 {
00126     return skew(_v1) * _v2;
00127 }
00128 }
00129 #endif
00130 
00131 

Generated on Wed Aug 6 12:58:47 2003 for Open-Sessame Framework by doxygen1.3