Bonjour,
J'ai créé une classe matrice pour inclure le calcul matriciel dans mon programme. Je sais que des librairies existent mais moi je veux pas les utiliser. Je tiens à le faire par moi-même.
J'ai surchargé l'opérateur () pour pouvoir accéder a un élément tableau private. Voilà le code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 #ifndef MATRIX_H #define MATRIX_H #include <QVector> class Matrix { public: Matrix(); void setSize(int rowNumber, int columnNumber); int rowCount(); int columnCount(); double operator()(int rowId, int columnId) const; double& operator()(int rowId, int columnId); void reverse(); void transpose(); double determinant(); ~Matrix(); private: int row; int column; QVector<double> data; double Det3x3Matrix(Matrix *M); }; Matrix operator+(Matrix a, Matrix b); Matrix operator*(Matrix a, Matrix b); #endif // MATRIX_H
L'intérêt est de pouvoir déclarer une matrice M et d'appeler ses éléments avec M(0,0) ou M(2,3), etc... ça marche bien sauf si M est un pointeur. Cette fonction ne marche pas et je ne sais pas pourquoi:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 double Matrix::operator()(int rowId, int columnId) const { return data[column*rowId+columnId]; } double& Matrix::operator()(int rowId, int columnId) { return data[column*rowId+columnId]; }
Il ne comprend pas l'opérateur -. Normal car je ne l'ai pas surchargé. En revanche l'opération devrait se passer entre des double, et pas des Matrices. J'en conclu que M[0,0] ne renvoie pas un double mais une matrice apparament. Pourquoi????
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 double Matrix::Det3x3Matrix(Matrix *M) { double determinant = 0; if (M->rowCount() == M->columnCount()) // On vérifie que M est une matrice carrée { determinant = M[0, 0] * (M[1, 1] * M[2, 2] - M[2, 1] * M[1, 2]) - M[0, 1] * (M[1, 0] * M[2, 2] - M[2, 0] * M[1, 2]) + M[0, 2] * (M[1, 0] * M[2, 1] - M[2, 0] * M[1, 1]); } return determinant; }
Merci de votre aide.
Cordialement
Partager