Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/orxonox/branches/nico/src/matrix.h @ 3542

Last change on this file since 3542 was 3399, checked in by bensch, 20 years ago

orxonox/branches/nico: merged trunk into branches/nico
merged with command:
svn merge ../trunk/ nico/ -r 3238:HEAD
resolved conflict in favor of branches/nico.

File size: 2.3 KB
Line 
1#ifndef _MATRIX_H
2#define _MATRIX_H
3
4#include <math.h>
5#include <stdio.h>
6#include <stdlib.h>
7#include <iostream>
8
9using namespace std;
10
11class Matrix
12{
13public:
14  // Constructors
15  Matrix (const Matrix& m);
16  Matrix (size_t row, size_t col);
17 
18  // Destructor
19  ~Matrix ();
20 
21  // Assignment operators
22  Matrix& operator = (const Matrix& m) ;
23 
24  // Value extraction method
25  size_t RowNo () const { return _m->Row; }
26  size_t ColNo () const { return _m->Col; }
27 
28  // Subscript operator
29  float& operator () (size_t row, size_t col);
30   float  operator () (size_t row, size_t col) const;
31
32   // Unary operators
33   Matrix operator + ()  { return *this; }
34   Matrix operator - () ;
35
36   // Combined assignment - calculation operators
37   Matrix& operator += (const Matrix& m);
38   Matrix& operator -= (const Matrix& m);
39   Matrix& operator *= (const Matrix& m);
40   Matrix& operator *= (const float& c) ;
41   Matrix& operator /= (const float& c) ;
42   Matrix& operator ^= (const size_t& pow);
43
44   // Miscellaneous -methods
45   void Null (const size_t& row, const size_t& col) ;
46   void Null () ;
47   void Unit (const size_t& row) ;
48   void Unit () ;
49   void SetSize (size_t row, size_t col) ;
50
51   // Utility methods
52   Matrix Solve (const Matrix& v) const;
53   Matrix Adj ();
54   Matrix Inv ();
55   float Det () const;
56   float Norm () ;
57   float Cofact (size_t row, size_t col);
58   float Cond () ;
59
60   // Type of matrices
61   bool IsSquare ()  { return (_m->Row == _m->Col); } 
62   bool IsSingular ();
63   bool IsDiagonal ();
64   bool IsScalar ();
65   bool IsUnit ();
66   bool IsNull ();
67   bool IsSymmetric ();
68   bool IsSkewSymmetric ();
69   bool IsUpperTriangular ();
70   bool IsLowerTriangular ();
71
72private:
73   struct base_mat
74    {
75        float **Val;
76        size_t Row, Col, RowSiz, ColSiz;
77        int Refcnt;
78
79        base_mat (size_t row, size_t col, float** v)
80        {
81            Row = row; RowSiz = row;
82            Col = col; ColSiz = col;
83            Refcnt = 1;
84
85            Val = new float* [row];
86            size_t rowlen = col * sizeof(float);
87
88            for (size_t i=0; i < row; i++)
89            {
90                Val[i] = new float [col];
91                if (v) memcpy( Val[i], v[i], rowlen);
92            }
93        }
94        ~base_mat ()
95        {
96            for (size_t i=0; i < RowSiz; i++)
97                delete [] Val[i];
98            delete [] Val;
99        }
100    };
101    base_mat *_m;
102
103    void clone ();
104    void realloc (size_t row, size_t col);
105    int pivot (size_t row);
106};
107
108Matrix operator ! (const Matrix m);
109
110#endif /*_MATRIX_H */
Note: See TracBrowser for help on using the repository browser.