use from Ernesto Palacios
Dependents: RoboticArm DXL_SDK_Porting_Test
Fork of Matrix by
Matrix.h
- Committer:
- Yo_Robot
- Date:
- 2011-09-23
- Revision:
- 0:3abd8c2d7c34
- Child:
- 1:48f417da268e
File content as of revision 0:3abd8c2d7c34:
/** * @file: Matrix.h * @author: Ernesto Palacios * Created on 13 de septiembre de 2011, 03:49 PM * * Develop Under GPL v3.0 License * http://www.gnu.org/licenses/gpl-3.0.html * */ #include <vector> #ifndef MATRIX_H #define MATRIX_H /** * @brief This class is intended to provide basic functionality to a Matrix like vector * it's meant for float elements. * * IMPORTAT: Asignment "=" operator is overloaded so that it resizes the 'lefthand' Matrix * to acomodate the Matrix it's been passed. * * An example of how it works: * @code * Matrix myMatrix( 3, 4 ); //Declare a 3 Rows by 4 Columns Matrix. * * myMatrix.Fill(); // Fill the matrix using printf() and scanf(). * myMatrix.print(); // Prints the value of the Matrix. printf() * * Matrix::DeleteCol( myMatrix, 2 ); //Deletes Second Column. (startin' with 1 not 0) * myMatrix.print(); // Re-prints Matrix * * Matrix anotherMatrix (3); // Squared 3x3 Matrix * anotherMatrix = myMatrix; // Re-Sizes 'anotherMatrix' to fit myMatrix * anotherMatrix += myMatrix; // Adds one-by-one elements and saves to anotherMatrix * anotherMatrix.print(); * @endcode * */ class Matrix{ public: /// Creates a nex Matrix of Size [ Row x Cols ] Matrix( int Rows, int Cols ); /// Creats a Square Matrix o Size [ Roxs x Rows ] Matrix( int Rows ); /// Creates a new Matrix identical in size to an input Matrix Matrix( const Matrix &base ); /// Reserves Memory for a New Matrix Matrix(); /** @brief Description: * This is the '=' Overloaded operator. It RESIZES assigned the matrix. * Overwrites all data. To be used Carefully! */ Matrix& operator = ( const Matrix &rightM ); /**@brief Description: * Overload opeartor for the compare Matrices * * @param rightM * @return Boolean 'false' if different. */ bool operator == ( const Matrix &rightM ); /**@brief Description: * Overload opeartor for the compare Matrices * * @param rightM * @return Boolean 'true' if different */ bool operator != ( const Matrix &rightM ); /**@brief * Description: * Overload Copmpound assignment. * @param rightM * @return A new Matrix to be assigned to itself. */ Matrix& operator += ( const Matrix &rightM ); /**@brief * Description: * Overload Compund decrease. * @param rightM Right hand matrix * @return A new Matrix to be assigned to itself */ Matrix& operator -= ( const Matrix &rightM ); /**@brief * Description: * Overloads the Plus, returns a new object. * @param rightM right side Matrix * @return Retuns an instance of the answer. */ const Matrix operator +( const Matrix &rightM ); /**@brief * Description: * Overloads the Minus, returns a new object * @param rightM * @return Returns an instance of the asnwer */ const Matrix operator -( const Matrix &rightM ); /** @brief * Description: * This method extracts a Row from a Matrix. * If Row is out of the parameters, it returns * an empty Row and prints a warning * @param Matrix: Matrix to extract from * @param Row: row number of the matrix */ Matrix GetRow(Matrix mat, int Row); /** @brief * Description: * This method extracts a Column from a Matrix. * If Row is out of the parameters, it returns * an empty Column and prints a warning */ Matrix GetCol(Matrix mat, int Col); /** @brief * Description: * Shatters the matrix into a single Row Vector. * Important: Returns NEW matrix, does no modify existing one. */ Matrix ToPackedVector(); /** @brief * Description: * Returns TRUE if the matrix is zero, FALSE otherwhise * @param mat: Matrix to be tested */ bool isZero(); /** @brief * Description: * Determines weather a Matrix is a Single Column or Row. */ bool isVector(); /**@brief * Description: * Determines if two matrices are equal. * @param mat1: First Matrix * @param mat2: Sencond Matrix */ static const bool Equals( Matrix mat1, Matrix mat2 ); /**@brief * Description: * This Funcrions instanciates a new Row Matrix. Since this is a * static function it needs to be assigned to an Empy Matrix Object * @param Rows: Number of Rows */ static Matrix CreateRowMatrix(int Rows); /**@brief * Description: * This function instanciates a new Column Matrix. Since this is a * static function it needs to be assigned to an Empty Matrix object * @param Cols: Number of Columns in Matrix */ static Matrix CreateColumnMatrix(int Cols); /**@brief * Description: * This STATIC function Clones two Matrices. * The Source Matrix can be any Size. * The Receip Matrix MUST be just initialized * as in: Matrix NewMatrix(); * @param Source: Base Matrix to Clone. * @param Receip: Destination shell matrix */ static void Clone( const Matrix &Source, Matrix Receip ); /**@brief * Description: * Static Function Deletes Row from Matrix, Static to prevent missuse * @param Mat: Matrix to delete Row from * @param Row: Number of Row (first Row = 1) */ static void DeleteRow( Matrix &Mat, int Row ); /**@brief * Description: * Static Function Deletes Column from Matrix, it's Static to prevent * missuse. * Print error and does nothing if out of limits. * @Mat: Matrix to delete column from * @param Col: Number of Col to delete (first Col = 1) */ static void DeleteCol( Matrix &Mat, int Col ); /**@brief * Description: * Assigns a float number to the matrix in position * * @param number: Number to be set * @param Row: Row of Matrix * @param Col: Column of Matrix */ void Add( int Row, int Col, float number ); /**@brief * Description: * This function resizes the Matrix to fit new data. * @param Rows: New Number of Rows * @param Cols: New numbler of columns */ void Resize( int Rows, int Cols ); /** @brief * Description: * Asks user for numbers to fill the Matrix elements. One by one */ void FillMatrix(); /** @brief * Description: * Makes all values on Matrix object zero. */ void Clear(); /** @brief * Description: * Prints the entire Matrix */ void print(); /** \brief * Description: * Returns the sum of every cell in the Matrix. */ float Sum(); /** @brief * Description: * Return the number in position [Row],[Col] * @param Row = number of row in matrix * @param Col = number of Col in matrix * @return Num = float number in matrix */ float GetNumber( int Row, int Col ); /**Retuns the number of Columns in Matrix*/ int getCols(); /**Retruns the number of Rows in Matrix */ int getRows(); private: /** 2-D Vector Array*/ vector < vector<float> > _matrix; /** Number of Rows in Matrix*/ int _Rows; /**Number of Columns in Matrix*/ int _Cols; }; #endif /* MATRIX_H */