Kalman filter for Eurobot

Committer:
madcowswe
Date:
Tue Mar 20 12:43:16 2012 +0000
Revision:
0:a0285293f6a6
Algo done, vars not done

Who changed what in which revision?

UserRevisionLine numberNew contents of line
madcowswe 0:a0285293f6a6 1 /**
madcowswe 0:a0285293f6a6 2 * @brief API for Matrix Library
madcowswe 0:a0285293f6a6 3 * @file Matrix.h
madcowswe 0:a0285293f6a6 4 * @author Ernesto Palacios
madcowswe 0:a0285293f6a6 5 *
madcowswe 0:a0285293f6a6 6 * Created on 13 de septiembre de 2011, 03:49 PM
madcowswe 0:a0285293f6a6 7 *
madcowswe 0:a0285293f6a6 8 * Develop Under GPL v3.0 License
madcowswe 0:a0285293f6a6 9 * http://www.gnu.org/licenses/gpl-3.0.html
madcowswe 0:a0285293f6a6 10 *
madcowswe 0:a0285293f6a6 11 */
madcowswe 0:a0285293f6a6 12
madcowswe 0:a0285293f6a6 13 #ifndef MATRIX_H
madcowswe 0:a0285293f6a6 14 #define MATRIX_H
madcowswe 0:a0285293f6a6 15
madcowswe 0:a0285293f6a6 16
madcowswe 0:a0285293f6a6 17 #include <vector>
madcowswe 0:a0285293f6a6 18
madcowswe 0:a0285293f6a6 19 class MatrixMath;
madcowswe 0:a0285293f6a6 20
madcowswe 0:a0285293f6a6 21 /**
madcowswe 0:a0285293f6a6 22 * @brief This class provide basic manipulation for 2D matrices see Log.c for more info
madcowswe 0:a0285293f6a6 23 * version 1.6.4.
madcowswe 0:a0285293f6a6 24 *
madcowswe 0:a0285293f6a6 25 */
madcowswe 0:a0285293f6a6 26 class Matrix{
madcowswe 0:a0285293f6a6 27 public:
madcowswe 0:a0285293f6a6 28
madcowswe 0:a0285293f6a6 29 /// Creates a nex Matrix of Size [ Row x Cols ]
madcowswe 0:a0285293f6a6 30 Matrix( int Rows, int Cols );
madcowswe 0:a0285293f6a6 31
madcowswe 0:a0285293f6a6 32
madcowswe 0:a0285293f6a6 33 /// Creates a new Matrix identical to an input Matrix
madcowswe 0:a0285293f6a6 34 Matrix( const Matrix& base );
madcowswe 0:a0285293f6a6 35
madcowswe 0:a0285293f6a6 36
madcowswe 0:a0285293f6a6 37 /// Default Constructor
madcowswe 0:a0285293f6a6 38 Matrix();
madcowswe 0:a0285293f6a6 39
madcowswe 0:a0285293f6a6 40
madcowswe 0:a0285293f6a6 41 /******************************************************************************/
madcowswe 0:a0285293f6a6 42
madcowswe 0:a0285293f6a6 43
madcowswe 0:a0285293f6a6 44 /**@brief This includes the Class to handle Matrix Operations.
madcowswe 0:a0285293f6a6 45 */
madcowswe 0:a0285293f6a6 46 friend class MatrixMath;
madcowswe 0:a0285293f6a6 47
madcowswe 0:a0285293f6a6 48
madcowswe 0:a0285293f6a6 49 /**@brief
madcowswe 0:a0285293f6a6 50 * Subindex for Matrix elements assignation.
madcowswe 0:a0285293f6a6 51 * @param row
madcowswe 0:a0285293f6a6 52 * @param col
madcowswe 0:a0285293f6a6 53 * @return pointer to the element.
madcowswe 0:a0285293f6a6 54 */
madcowswe 0:a0285293f6a6 55 float& operator() ( int row, int col );
madcowswe 0:a0285293f6a6 56
madcowswe 0:a0285293f6a6 57
madcowswe 0:a0285293f6a6 58 /**@brief
madcowswe 0:a0285293f6a6 59 *Subindex for Matrix element.
madcowswe 0:a0285293f6a6 60 * @param row
madcowswe 0:a0285293f6a6 61 * @param col
madcowswe 0:a0285293f6a6 62 * @return the element.
madcowswe 0:a0285293f6a6 63 */
madcowswe 0:a0285293f6a6 64 float operator() ( int row, int col ) const;
madcowswe 0:a0285293f6a6 65
madcowswe 0:a0285293f6a6 66
madcowswe 0:a0285293f6a6 67
madcowswe 0:a0285293f6a6 68 /** @brief
madcowswe 0:a0285293f6a6 69 * Overwrites all data. To be used Carefully!
madcowswe 0:a0285293f6a6 70 */
madcowswe 0:a0285293f6a6 71 Matrix& operator = ( const Matrix& rightM );
madcowswe 0:a0285293f6a6 72
madcowswe 0:a0285293f6a6 73
madcowswe 0:a0285293f6a6 74 /** @brief
madcowswe 0:a0285293f6a6 75 * Overload opeartor for the compare Matrices
madcowswe 0:a0285293f6a6 76 *
madcowswe 0:a0285293f6a6 77 * @param rightM
madcowswe 0:a0285293f6a6 78 * @return Boolean 'false' if different.
madcowswe 0:a0285293f6a6 79 */
madcowswe 0:a0285293f6a6 80 friend bool operator == ( const Matrix& leftM, const Matrix& rightM );
madcowswe 0:a0285293f6a6 81
madcowswe 0:a0285293f6a6 82
madcowswe 0:a0285293f6a6 83 /** @brief
madcowswe 0:a0285293f6a6 84 * Overload opeartor for the compare Matrices
madcowswe 0:a0285293f6a6 85 *
madcowswe 0:a0285293f6a6 86 * @param rightM
madcowswe 0:a0285293f6a6 87 * @return Boolean 'true' if different
madcowswe 0:a0285293f6a6 88 */
madcowswe 0:a0285293f6a6 89 friend bool operator != ( const Matrix& leftM, const Matrix& rightM );
madcowswe 0:a0285293f6a6 90
madcowswe 0:a0285293f6a6 91
madcowswe 0:a0285293f6a6 92 /** @brief
madcowswe 0:a0285293f6a6 93 * Overload Copmpound assignment.
madcowswe 0:a0285293f6a6 94 * @param rightM
madcowswe 0:a0285293f6a6 95 * @return A new Matrix to be assigned to itself.
madcowswe 0:a0285293f6a6 96 */
madcowswe 0:a0285293f6a6 97 friend Matrix& operator += ( Matrix& leftM, const Matrix& rightM );
madcowswe 0:a0285293f6a6 98
madcowswe 0:a0285293f6a6 99
madcowswe 0:a0285293f6a6 100 /** @brief
madcowswe 0:a0285293f6a6 101 * Overload Compund decrease.
madcowswe 0:a0285293f6a6 102 * @param rightM Right hand matrix
madcowswe 0:a0285293f6a6 103 * @return A new Matrix to be assigned to itself
madcowswe 0:a0285293f6a6 104 */
madcowswe 0:a0285293f6a6 105 friend Matrix& operator -= ( Matrix& leftM, const Matrix& rightM );
madcowswe 0:a0285293f6a6 106
madcowswe 0:a0285293f6a6 107
madcowswe 0:a0285293f6a6 108 /** @brief
madcowswe 0:a0285293f6a6 109 * Overload Compound CrossProduct Matrix operation.
madcowswe 0:a0285293f6a6 110 * @param rightM
madcowswe 0:a0285293f6a6 111 * @return
madcowswe 0:a0285293f6a6 112 */
madcowswe 0:a0285293f6a6 113 friend Matrix& operator *=( Matrix& leftM, const Matrix& rightM );
madcowswe 0:a0285293f6a6 114
madcowswe 0:a0285293f6a6 115
madcowswe 0:a0285293f6a6 116 /** @brief
madcowswe 0:a0285293f6a6 117 * Overload Compund Element-by-elemnt scalar multiplication.
madcowswe 0:a0285293f6a6 118 * @param number
madcowswe 0:a0285293f6a6 119 * @return
madcowswe 0:a0285293f6a6 120 */
madcowswe 0:a0285293f6a6 121 friend Matrix& operator *=( Matrix& leftM, float number );
madcowswe 0:a0285293f6a6 122
madcowswe 0:a0285293f6a6 123
madcowswe 0:a0285293f6a6 124
madcowswe 0:a0285293f6a6 125 /**@brief
madcowswe 0:a0285293f6a6 126 * All elements in matrix are multiplied by (-1).
madcowswe 0:a0285293f6a6 127 * @return A new Matrix object with inverted values.
madcowswe 0:a0285293f6a6 128 */
madcowswe 0:a0285293f6a6 129 const Matrix operator -();
madcowswe 0:a0285293f6a6 130
madcowswe 0:a0285293f6a6 131
madcowswe 0:a0285293f6a6 132 /**@brief
madcowswe 0:a0285293f6a6 133 * Overload Compound add with scalar.
madcowswe 0:a0285293f6a6 134 * Because the '=' operator checks for self Assign, no extra operations
madcowswe 0:a0285293f6a6 135 * are needed.
madcowswe 0:a0285293f6a6 136 * @return Same Matrix to self Assign.
madcowswe 0:a0285293f6a6 137 */
madcowswe 0:a0285293f6a6 138 friend const Matrix operator +=( Matrix& leftM, float number );
madcowswe 0:a0285293f6a6 139
madcowswe 0:a0285293f6a6 140
madcowswe 0:a0285293f6a6 141 /**@brief
madcowswe 0:a0285293f6a6 142 * Compound substract with scalar.
madcowswe 0:a0285293f6a6 143 * @return Same matrix to self Assign.
madcowswe 0:a0285293f6a6 144 */
madcowswe 0:a0285293f6a6 145 friend const Matrix operator -=( Matrix& leftM, float number );
madcowswe 0:a0285293f6a6 146
madcowswe 0:a0285293f6a6 147
madcowswe 0:a0285293f6a6 148 /** @brief
madcowswe 0:a0285293f6a6 149 * Adds two matrices of the same dimensions, element-by-element.
madcowswe 0:a0285293f6a6 150 * If diferent dimensions -> ERROR.
madcowswe 0:a0285293f6a6 151 * @return A new object Matrix with the result.
madcowswe 0:a0285293f6a6 152 */
madcowswe 0:a0285293f6a6 153 friend const Matrix operator +( const Matrix& leftM, const Matrix& rightM);
madcowswe 0:a0285293f6a6 154
madcowswe 0:a0285293f6a6 155
madcowswe 0:a0285293f6a6 156 /** @brief
madcowswe 0:a0285293f6a6 157 * Adds the given nomber to each element of matrix.
madcowswe 0:a0285293f6a6 158 * Mimic MATLAB operation.
madcowswe 0:a0285293f6a6 159 * @return A new matrix object with the result.
madcowswe 0:a0285293f6a6 160 */
madcowswe 0:a0285293f6a6 161 friend const Matrix operator +( const Matrix& leftM, float number );
madcowswe 0:a0285293f6a6 162
madcowswe 0:a0285293f6a6 163
madcowswe 0:a0285293f6a6 164
madcowswe 0:a0285293f6a6 165 /**@brief
madcowswe 0:a0285293f6a6 166 * Adds the given number to each element in Matrix.
madcowswe 0:a0285293f6a6 167 * @return A new Matrix object with the result.
madcowswe 0:a0285293f6a6 168 */
madcowswe 0:a0285293f6a6 169 friend const Matrix operator +( float number, const Matrix& leftM );
madcowswe 0:a0285293f6a6 170
madcowswe 0:a0285293f6a6 171
madcowswe 0:a0285293f6a6 172 /**@brief
madcowswe 0:a0285293f6a6 173 * Substracts two matrices of the same size, element-by-element.
madcowswe 0:a0285293f6a6 174 * If different dimensions -> ERROR.
madcowswe 0:a0285293f6a6 175 * @return A new object Matrix with the result.
madcowswe 0:a0285293f6a6 176 */
madcowswe 0:a0285293f6a6 177 friend const Matrix operator -( const Matrix& leftM, const Matrix& rightM );
madcowswe 0:a0285293f6a6 178
madcowswe 0:a0285293f6a6 179
madcowswe 0:a0285293f6a6 180 /**@brief
madcowswe 0:a0285293f6a6 181 * Substracts each element in Matrix by number.
madcowswe 0:a0285293f6a6 182 * @return A new matrix object with the result.
madcowswe 0:a0285293f6a6 183 */
madcowswe 0:a0285293f6a6 184 friend const Matrix operator -( const Matrix& leftM, float number );
madcowswe 0:a0285293f6a6 185
madcowswe 0:a0285293f6a6 186
madcowswe 0:a0285293f6a6 187 /**@brief
madcowswe 0:a0285293f6a6 188 * Substracts each element in Matrix by number
madcowswe 0:a0285293f6a6 189 * @return A new matrix object with the result.
madcowswe 0:a0285293f6a6 190 */
madcowswe 0:a0285293f6a6 191 friend const Matrix operator -( float number, const Matrix& leftM );
madcowswe 0:a0285293f6a6 192
madcowswe 0:a0285293f6a6 193
madcowswe 0:a0285293f6a6 194 /**
madcowswe 0:a0285293f6a6 195 * Preforms Crossproduct between two matrices.
madcowswe 0:a0285293f6a6 196 * @return
madcowswe 0:a0285293f6a6 197 */
madcowswe 0:a0285293f6a6 198 friend const Matrix operator *( const Matrix& leftM, const Matrix& rightM );
madcowswe 0:a0285293f6a6 199
madcowswe 0:a0285293f6a6 200
madcowswe 0:a0285293f6a6 201 /**@brief
madcowswe 0:a0285293f6a6 202 * Multiplies a scalar number with each element on Matrix.
madcowswe 0:a0285293f6a6 203 * @return A new object with the result.
madcowswe 0:a0285293f6a6 204 */
madcowswe 0:a0285293f6a6 205 friend const Matrix operator *( const Matrix& leftM, float number );
madcowswe 0:a0285293f6a6 206
madcowswe 0:a0285293f6a6 207
madcowswe 0:a0285293f6a6 208 /**@brief
madcowswe 0:a0285293f6a6 209 * Multiplies a scalar number with each element on Matrix.
madcowswe 0:a0285293f6a6 210 * @return
madcowswe 0:a0285293f6a6 211 */
madcowswe 0:a0285293f6a6 212 friend const Matrix operator *( float number, const Matrix& leftM );
madcowswe 0:a0285293f6a6 213
madcowswe 0:a0285293f6a6 214
madcowswe 0:a0285293f6a6 215 /**@brief
madcowswe 0:a0285293f6a6 216 * Inputs numbres into a Matrix, the matrix needs to be costructed as
madcowswe 0:a0285293f6a6 217 * Matrix( _nRows, _nCols ).
madcowswe 0:a0285293f6a6 218 * This does NOT work on an only declared Matrix such as:
madcowswe 0:a0285293f6a6 219 * Matrix obj;
madcowswe 0:a0285293f6a6 220 * obj << 5; //Error
madcowswe 0:a0285293f6a6 221 * @return
madcowswe 0:a0285293f6a6 222 */
madcowswe 0:a0285293f6a6 223 friend Matrix& operator <<( Matrix& leftM, float number );
madcowswe 0:a0285293f6a6 224
madcowswe 0:a0285293f6a6 225 /***********************************************************************/
madcowswe 0:a0285293f6a6 226
madcowswe 0:a0285293f6a6 227 /** @brief
madcowswe 0:a0285293f6a6 228 * Returns TRUE if the matrix is zero, FALSE otherwhise
madcowswe 0:a0285293f6a6 229 * @param mat: Matrix to be tested
madcowswe 0:a0285293f6a6 230 */
madcowswe 0:a0285293f6a6 231 bool isZero() const;
madcowswe 0:a0285293f6a6 232
madcowswe 0:a0285293f6a6 233
madcowswe 0:a0285293f6a6 234 /** @brief
madcowswe 0:a0285293f6a6 235 * Determines weather a Matrix is a Single Column or Row.
madcowswe 0:a0285293f6a6 236 */
madcowswe 0:a0285293f6a6 237 bool isVector() const;
madcowswe 0:a0285293f6a6 238
madcowswe 0:a0285293f6a6 239
madcowswe 0:a0285293f6a6 240 /** @brief
madcowswe 0:a0285293f6a6 241 * Shatters the matrix into a single Row Vector.
madcowswe 0:a0285293f6a6 242 * Important: Returns NEW matrix, does no modify existing one.
madcowswe 0:a0285293f6a6 243 */
madcowswe 0:a0285293f6a6 244 static const Matrix ToPackedVector( const Matrix& Mat );
madcowswe 0:a0285293f6a6 245
madcowswe 0:a0285293f6a6 246
madcowswe 0:a0285293f6a6 247 /** @brief
madcowswe 0:a0285293f6a6 248 * Invoking this static method will increase a Row in Mat in the desired
madcowswe 0:a0285293f6a6 249 * position.
madcowswe 0:a0285293f6a6 250 * The current Row will be moved down to allocate space, and all elements will
madcowswe 0:a0285293f6a6 251 * be initialized to zero in the new row.
madcowswe 0:a0285293f6a6 252 * @param Mat: Matrix in wich to insert a Row
madcowswe 0:a0285293f6a6 253 * @param Row: Number of row to insert, starts with one, not zero.
madcowswe 0:a0285293f6a6 254 */
madcowswe 0:a0285293f6a6 255 static void AddRow( Matrix& Mat, int index );
madcowswe 0:a0285293f6a6 256
madcowswe 0:a0285293f6a6 257
madcowswe 0:a0285293f6a6 258 /**@brief
madcowswe 0:a0285293f6a6 259 * Adds to Receip a new Row from another Matrix in desired index.
madcowswe 0:a0285293f6a6 260 * Must be same size.
madcowswe 0:a0285293f6a6 261 * The Row matrix must be SingleRow Matrix, you can use ExportRow
madcowswe 0:a0285293f6a6 262 * to extract a Row from another Matrix.
madcowswe 0:a0285293f6a6 263 * @param Receip Matrix to be Modified.
madcowswe 0:a0285293f6a6 264 * @param Row Row to be added.
madcowswe 0:a0285293f6a6 265 * @param index position in wich to be added, _nRow + 1 last position.
madcowswe 0:a0285293f6a6 266 */
madcowswe 0:a0285293f6a6 267 static void AddRow( Matrix& Receip, const Matrix& Row, int index );
madcowswe 0:a0285293f6a6 268
madcowswe 0:a0285293f6a6 269
madcowswe 0:a0285293f6a6 270 /** @brief
madcowswe 0:a0285293f6a6 271 * Invoking this static method will increase a Column in Matrix in the
madcowswe 0:a0285293f6a6 272 * desired Position.
madcowswe 0:a0285293f6a6 273 * @param Mat: Matrix in wich to insert a Column
madcowswe 0:a0285293f6a6 274 * @param Col: Number of column, strats with one, not zero.
madcowswe 0:a0285293f6a6 275 */
madcowswe 0:a0285293f6a6 276 static void AddCol( Matrix& Mat, int index );
madcowswe 0:a0285293f6a6 277
madcowswe 0:a0285293f6a6 278
madcowswe 0:a0285293f6a6 279 /**@brief
madcowswe 0:a0285293f6a6 280 * This will copy a Column Matrix into Receip in desired Position,
madcowswe 0:a0285293f6a6 281 * Must be same size.
madcowswe 0:a0285293f6a6 282 * The Col Matrix must be a SingleCol Matrix, you can use ExportCol
madcowswe 0:a0285293f6a6 283 * to extract a Column from another Matrix.
madcowswe 0:a0285293f6a6 284 * @param Receip Matrix to be modified.
madcowswe 0:a0285293f6a6 285 * @param Column Data to be copied.
madcowswe 0:a0285293f6a6 286 * @param index Postion in Receip Matrix .
madcowswe 0:a0285293f6a6 287 */
madcowswe 0:a0285293f6a6 288 static void AddCol( Matrix& Receip, const Matrix& Col, int index );
madcowswe 0:a0285293f6a6 289
madcowswe 0:a0285293f6a6 290
madcowswe 0:a0285293f6a6 291 /** @brief
madcowswe 0:a0285293f6a6 292 * Static Function Deletes Row from Matrix, Static to prevent missuse
madcowswe 0:a0285293f6a6 293 * @param Mat: Matrix to delete Row from
madcowswe 0:a0285293f6a6 294 * @param Row: Number of Row (first Row = 1)
madcowswe 0:a0285293f6a6 295 */
madcowswe 0:a0285293f6a6 296 static void DeleteRow( Matrix& Mat, int Row );
madcowswe 0:a0285293f6a6 297
madcowswe 0:a0285293f6a6 298
madcowswe 0:a0285293f6a6 299 /** @brief
madcowswe 0:a0285293f6a6 300 * Static Function Deletes Column from Matrix, it's Static to prevent
madcowswe 0:a0285293f6a6 301 * missuse.
madcowswe 0:a0285293f6a6 302 * Print error and does nothing if out of limits.
madcowswe 0:a0285293f6a6 303 * @param Col: Number of Col to delete (first Col = 1)
madcowswe 0:a0285293f6a6 304 * @param Mat: Matrix to delete from.
madcowswe 0:a0285293f6a6 305 */
madcowswe 0:a0285293f6a6 306 static void DeleteCol( Matrix& Mat, int Col );
madcowswe 0:a0285293f6a6 307
madcowswe 0:a0285293f6a6 308
madcowswe 0:a0285293f6a6 309 /** @brief
madcowswe 0:a0285293f6a6 310 * This method extracts a Row from a Matrix and Saves it in Mat.
madcowswe 0:a0285293f6a6 311 * If Row is out of the parameters it does nothing, but prints a warning.
madcowswe 0:a0285293f6a6 312 * @param Row: number of row to extract elements. this->_nRows.
madcowswe 0:a0285293f6a6 313 * @param Mat: Matrix to extract from.
madcowswe 0:a0285293f6a6 314 * @return New Row Matrix.
madcowswe 0:a0285293f6a6 315 */
madcowswe 0:a0285293f6a6 316 static const Matrix ExportRow( const Matrix& Mat, int row );
madcowswe 0:a0285293f6a6 317
madcowswe 0:a0285293f6a6 318
madcowswe 0:a0285293f6a6 319 /** @brief
madcowswe 0:a0285293f6a6 320 * This method extracts a Column from a Matrix and returns the Column
madcowswe 0:a0285293f6a6 321 * as a new Matrix.
madcowswe 0:a0285293f6a6 322 * If Row is out of the parameters, it does nothing and prints a warning.
madcowswe 0:a0285293f6a6 323 * @param Col: number of Column to extract elements. this->_nCols.
madcowswe 0:a0285293f6a6 324 * @param Mat: Matrix to extract from.
madcowswe 0:a0285293f6a6 325 * @return New Row Matrix.
madcowswe 0:a0285293f6a6 326 */
madcowswe 0:a0285293f6a6 327 static const Matrix ExportCol( const Matrix& Mat, int col );
madcowswe 0:a0285293f6a6 328
madcowswe 0:a0285293f6a6 329
madcowswe 0:a0285293f6a6 330 /** @brief
madcowswe 0:a0285293f6a6 331 * This function resizes the Matrix to fit new data or cropped it,
madcowswe 0:a0285293f6a6 332 * operator << can overwrite entire Matrix.
madcowswe 0:a0285293f6a6 333 *
madcowswe 0:a0285293f6a6 334 * @param Rows: New Number of Rows
madcowswe 0:a0285293f6a6 335 * @param Cols: New numbler of columns
madcowswe 0:a0285293f6a6 336 */
madcowswe 0:a0285293f6a6 337 void Resize( int Rows, int Cols );
madcowswe 0:a0285293f6a6 338
madcowswe 0:a0285293f6a6 339
madcowswe 0:a0285293f6a6 340 /** @brief
madcowswe 0:a0285293f6a6 341 * Asks user for numbers to fill the Matrix elements, one by one.
madcowswe 0:a0285293f6a6 342 * It uses printf(); by default the USBTX, USBRX, 9600, 1N8.
madcowswe 0:a0285293f6a6 343 */
madcowswe 0:a0285293f6a6 344 virtual void FillMatrix();
madcowswe 0:a0285293f6a6 345
madcowswe 0:a0285293f6a6 346
madcowswe 0:a0285293f6a6 347 /** @brief
madcowswe 0:a0285293f6a6 348 * Prints the entire Matrix using standard PRINTF
madcowswe 0:a0285293f6a6 349 */
madcowswe 0:a0285293f6a6 350 virtual void print() const;
madcowswe 0:a0285293f6a6 351
madcowswe 0:a0285293f6a6 352
madcowswe 0:a0285293f6a6 353 /** @brief
madcowswe 0:a0285293f6a6 354 * Makes all values on Matrix object zero.
madcowswe 0:a0285293f6a6 355 * Also make posible use the '<<' operator to add elements and keep
madcowswe 0:a0285293f6a6 356 * track of last element added.
madcowswe 0:a0285293f6a6 357 */
madcowswe 0:a0285293f6a6 358 void Clear();
madcowswe 0:a0285293f6a6 359
madcowswe 0:a0285293f6a6 360
madcowswe 0:a0285293f6a6 361 /** @brief
madcowswe 0:a0285293f6a6 362 * Assigns a float number to the matrix in a specified position
madcowswe 0:a0285293f6a6 363 * Index starts at [1][1].
madcowswe 0:a0285293f6a6 364 *
madcowswe 0:a0285293f6a6 365 * @param number: Number to be set
madcowswe 0:a0285293f6a6 366 * @param Row: Row of Matrix
madcowswe 0:a0285293f6a6 367 * @param Col: Column of Matrix
madcowswe 0:a0285293f6a6 368 */
madcowswe 0:a0285293f6a6 369 void add( int Row, int Col, float number );
madcowswe 0:a0285293f6a6 370
madcowswe 0:a0285293f6a6 371
madcowswe 0:a0285293f6a6 372 /** @brief
madcowswe 0:a0285293f6a6 373 * Returns the sum of every cell in the Matrix.
madcowswe 0:a0285293f6a6 374 */
madcowswe 0:a0285293f6a6 375 float sum() const;
madcowswe 0:a0285293f6a6 376
madcowswe 0:a0285293f6a6 377
madcowswe 0:a0285293f6a6 378 /** @brief
madcowswe 0:a0285293f6a6 379 * Return the number in position [Row],[Col]
madcowswe 0:a0285293f6a6 380 * @param Row = number of row in matrix
madcowswe 0:a0285293f6a6 381 * @param Col = number of Col in matrix
madcowswe 0:a0285293f6a6 382 * @return Num = float number in matrix
madcowswe 0:a0285293f6a6 383 */
madcowswe 0:a0285293f6a6 384 float getNumber( int Row, int Col ) const;
madcowswe 0:a0285293f6a6 385
madcowswe 0:a0285293f6a6 386
madcowswe 0:a0285293f6a6 387 /**@brief
madcowswe 0:a0285293f6a6 388 * Retuns the number of Columns in Matrix, index starts at 1.
madcowswe 0:a0285293f6a6 389 */
madcowswe 0:a0285293f6a6 390 int getCols() const;
madcowswe 0:a0285293f6a6 391
madcowswe 0:a0285293f6a6 392
madcowswe 0:a0285293f6a6 393 /**@brief
madcowswe 0:a0285293f6a6 394 *Retruns the number of Rows in Matrix, index starts at 1.
madcowswe 0:a0285293f6a6 395 */
madcowswe 0:a0285293f6a6 396 int getRows() const;
madcowswe 0:a0285293f6a6 397
madcowswe 0:a0285293f6a6 398
madcowswe 0:a0285293f6a6 399 private:
madcowswe 0:a0285293f6a6 400
madcowswe 0:a0285293f6a6 401 /** 2-D Vector Array*/
madcowswe 0:a0285293f6a6 402 std::vector < std::vector<float> > _matrix;
madcowswe 0:a0285293f6a6 403
madcowswe 0:a0285293f6a6 404
madcowswe 0:a0285293f6a6 405
madcowswe 0:a0285293f6a6 406 /** Number of Rows in Matrix*/
madcowswe 0:a0285293f6a6 407 int _nRows;
madcowswe 0:a0285293f6a6 408
madcowswe 0:a0285293f6a6 409 /**Number of Columns in Matrix*/
madcowswe 0:a0285293f6a6 410 int _nCols;
madcowswe 0:a0285293f6a6 411
madcowswe 0:a0285293f6a6 412
madcowswe 0:a0285293f6a6 413
madcowswe 0:a0285293f6a6 414 /**Last Element Row position in Matrix*/
madcowswe 0:a0285293f6a6 415 int _pRow;
madcowswe 0:a0285293f6a6 416
madcowswe 0:a0285293f6a6 417 /**Last Element Col position in Matrix*/
madcowswe 0:a0285293f6a6 418 int _pCol;
madcowswe 0:a0285293f6a6 419
madcowswe 0:a0285293f6a6 420 };
madcowswe 0:a0285293f6a6 421
madcowswe 0:a0285293f6a6 422 #endif /* MATRIX_H */
madcowswe 0:a0285293f6a6 423