src/matrix.h

Sun, 03 Nov 2019 18:09:47 +0200

author
Teemu Piippo <teemu@hecknology.net>
date
Sun, 03 Nov 2019 18:09:47 +0200
changeset 13
6e838748867b
parent 11
771168ee2c76
child 17
a5111f4e6412
permissions
-rw-r--r--

renamings

8
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
1 #pragma once
11
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
2 #include <QGenericMatrix>
8
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
3
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
4 template<int Rows, int Columns, typename T = double>
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
5 struct Matrix
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
6 {
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
7 T values[Rows][Columns];
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
8 T& operator()(int row, int column)
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
9 {
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
10 return this->values[row][column];
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
11 }
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
12 T operator()(int row, int column) const
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
13 {
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
14 return this->values[row][column];
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
15 }
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
16 };
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
17
11
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
18 template<int Rows, int Columns, typename T>
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
19 QGenericMatrix<Rows, Columns, T> matrixToQGenericMatrix(const Matrix<Rows, Columns, T>& matrix)
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
20 {
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
21 return {matrix.values};
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
22 }
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
23
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
24 template<int Rows, int Columns, typename T>
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
25 Matrix<Rows, Columns, T> matrixFromQGenericMatrix(const QGenericMatrix<Rows, Columns, T&> matrix)
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
26 {
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
27 Matrix<Rows, Columns, T> result;
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
28 for (int row = 0; row < Rows; row += 1)
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
29 {
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
30 for (int column = 0; column < Columns; column += 1)
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
31 {
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
32 result(row, column) = matrix(row, column);
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
33 }
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
34 }
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
35 return result;
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
36 }
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
37
8
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
38 using Matrix3x3 = Matrix<3, 3>;
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
39 Q_DECLARE_METATYPE(Matrix3x3);
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
40 using Matrix4x4 = Matrix<4, 4>;
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
41 Q_DECLARE_METATYPE(Matrix4x4);
11
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
42
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
43 template<int Rows, int Columns, typename T>
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
44 QDataStream& operator<<(QDataStream& stream, const Matrix<Rows, Columns, T>& matrix)
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
45 {
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
46 return stream << matrixToQGenericMatrix(matrix);
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
47 }
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
48
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
49 template<int Rows, int Columns, typename T>
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
50 QDataStream& operator>>(QDataStream& stream, Matrix<Rows, Columns, T>& matrix)
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
51 {
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
52 QGenericMatrix<Rows, Columns, T> qmatrix;
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
53 stream >> qmatrix;
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
54 matrix = matrixFromQGenericMatrix(matrix);
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
55 return stream;
771168ee2c76 added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
56 }

mercurial