src/basics.h

changeset 1219
8e39b5d7c562
parent 1218
e0b59d183f96
child 1222
34def2630300
equal deleted inserted replaced
1218:e0b59d183f96 1219:8e39b5d7c562
83 return vertex * scalar; 83 return vertex * scalar;
84 } 84 }
85 85
86 Q_DECLARE_METATYPE(Vertex) 86 Q_DECLARE_METATYPE(Vertex)
87 87
88 // 88 /*
89 // A mathematical 3 x 3 matrix 89 * A mathematical 3 x 3 matrix
90 // 90 */
91 class Matrix 91 class Matrix
92 { 92 {
93 public: 93 public:
94 Matrix() {} 94 Matrix();
95 Matrix(const std::initializer_list<double>& vals); 95 Matrix(std::initializer_list<double> values);
96 96
97 // Constructs a matrix all 9 elements initialized to the same value. 97 double determinant() const;
98 Matrix(double fillval); 98 QString toString() const;
99 99 void zero();
100 // Constructs a matrix with a C-array. 100 Matrix& operator=(const Matrix& other);
101 // note: @vals is expected to have exactly 9 elements. 101 Matrix operator*(const Matrix& other) const;
102 Matrix(double vals[]); 102 double& operator[](int idx);
103 103 const double& operator[](int idx) const;
104 // Calculates the matrix's determinant. 104 double& operator()(int row, int column);
105 double getDeterminant() const; 105 const double& operator()(int row, int column) const;
106 106 bool operator==(const Matrix& other) const;
107 // Multiplies this matrix with @other
108 // note: a.mult(b) is not equivalent to b.mult(a)!
109 Matrix mult(const Matrix& other) const;
110
111 // Prints the matrix to stdout.
112 void dump() const;
113
114 // Yields a string representation of the matrix.
115 QString toString() const;
116
117 // Zeroes the matrix out.
118 void zero();
119
120 // Assigns the matrix values to the values of @other.
121 Matrix& operator= (const Matrix& other);
122
123 // Returns a mutable reference to a value by @idx
124 inline double& value(int idx)
125 {
126 return m_vals[idx];
127 }
128
129 // An overload of value() for const matrices.
130 inline const double& value(int idx) const
131 {
132 return m_vals[idx];
133 }
134
135 // An operator overload for mult().
136 inline Matrix operator*(const Matrix& other) const
137 {
138 return mult(other);
139 }
140
141 // An operator overload for value().
142 inline double& operator[](int idx)
143 {
144 return value(idx);
145 }
146
147 // An operator overload for value() const.
148 inline const double& operator[](int idx) const
149 {
150 return value(idx);
151 }
152
153 // Checks whether the two matrices have the same values.
154 bool operator== (const Matrix& other) const;
155 107
156 private: 108 private:
157 double m_vals[9]; 109 double coefficients[9];
158 }; 110 };
111
112 inline double& Matrix::operator[](int idx)
113 {
114 return coefficients[idx];
115 }
116
117 inline const double& Matrix::operator[](int idx) const
118 {
119 return coefficients[idx];
120 }
121
122 inline double& Matrix::operator()(int row, int column)
123 {
124 return coefficients[row * 3 + column];
125 }
126
127 inline const double& Matrix::operator()(int row, int column) const
128 {
129 return coefficients[row * 3 + column];
130 }
131
159 132
160 // 133 //
161 // Defines a bounding box that encompasses a given set of objects. 134 // Defines a bounding box that encompasses a given set of objects.
162 // vertex0 is the minimum vertex, vertex1 is the maximum vertex. 135 // vertex0 is the minimum vertex, vertex1 is the maximum vertex.
163 // 136 //
182 bool m_isEmpty; 155 bool m_isEmpty;
183 Vertex m_vertex0; 156 Vertex m_vertex0;
184 Vertex m_vertex1; 157 Vertex m_vertex1;
185 }; 158 };
186 159
187 extern const Matrix IdentityMatrix;
188
189 static const double Pi = 3.14159265358979323846; 160 static const double Pi = 3.14159265358979323846;
190 161
191 162
192 // ============================================================================= 163 // =============================================================================
193 // Plural expression 164 // Plural expression

mercurial