129 return false; |
129 return false; |
130 } |
130 } |
131 |
131 |
132 // ============================================================================= |
132 // ============================================================================= |
133 // |
133 // |
134 Matrix::Matrix (double vals[]) |
|
135 { |
|
136 for (int i = 0; i < 9; ++i) |
|
137 m_vals[i] = vals[i]; |
|
138 } |
|
139 |
|
140 // ============================================================================= |
|
141 // |
|
142 Matrix::Matrix (double fillval) |
|
143 { |
|
144 for (int i = 0; i < 9; ++i) |
|
145 m_vals[i] = fillval; |
|
146 } |
|
147 |
|
148 // ============================================================================= |
|
149 // |
|
150 Matrix::Matrix (const std::initializer_list<double>& vals) |
|
151 { |
|
152 if (vals.size() == 9) |
|
153 memcpy (&m_vals[0], vals.begin(), sizeof m_vals); |
|
154 } |
|
155 |
|
156 // ============================================================================= |
|
157 // |
|
158 void Matrix::dump() const |
|
159 { |
|
160 for (int i = 0; i < 3; ++i) |
|
161 { |
|
162 for (int j = 0; j < 3; ++j) |
|
163 print ("%1\t", m_vals[i * 3 + j]); |
|
164 |
|
165 print ("\n"); |
|
166 } |
|
167 } |
|
168 |
|
169 // ============================================================================= |
|
170 // |
|
171 QString Matrix::toString() const |
|
172 { |
|
173 QString val; |
|
174 |
|
175 for (int i = 0; i < 9; ++i) |
|
176 { |
|
177 if (i > 0) |
|
178 val += ' '; |
|
179 |
|
180 val += QString::number (m_vals[i]); |
|
181 } |
|
182 |
|
183 return val; |
|
184 } |
|
185 |
|
186 // ============================================================================= |
|
187 // |
|
188 void Matrix::zero() |
|
189 { |
|
190 memset (&m_vals[0], 0, sizeof m_vals); |
|
191 } |
|
192 |
|
193 // ============================================================================= |
|
194 // |
|
195 Matrix Matrix::mult (const Matrix& other) const |
|
196 { |
|
197 Matrix val; |
|
198 val.zero(); |
|
199 |
|
200 for (int i = 0; i < 3; ++i) |
|
201 for (int j = 0; j < 3; ++j) |
|
202 for (int k = 0; k < 3; ++k) |
|
203 val[(i * 3) + j] += m_vals[(i * 3) + k] * other[(k * 3) + j]; |
|
204 |
|
205 return val; |
|
206 } |
|
207 |
|
208 // ============================================================================= |
|
209 // |
|
210 Matrix& Matrix::operator= (const Matrix& other) |
|
211 { |
|
212 memcpy (&m_vals[0], &other.m_vals[0], sizeof m_vals); |
|
213 return *this; |
|
214 } |
|
215 |
|
216 // ============================================================================= |
|
217 // |
|
218 double Matrix::getDeterminant() const |
|
219 { |
|
220 return (value (0) * value (4) * value (8)) + |
|
221 (value (1) * value (5) * value (6)) + |
|
222 (value (2) * value (3) * value (7)) - |
|
223 (value (2) * value (4) * value (6)) - |
|
224 (value (1) * value (3) * value (8)) - |
|
225 (value (0) * value (5) * value (7)); |
|
226 } |
|
227 |
|
228 // ============================================================================= |
|
229 // |
|
230 bool Matrix::operator== (const Matrix& other) const |
|
231 { |
|
232 for (int i = 0; i < 9; ++i) |
|
233 { |
|
234 if (value (i) != other[i]) |
|
235 return false; |
|
236 } |
|
237 |
|
238 return true; |
|
239 } |
|
240 |
|
241 // ============================================================================= |
|
242 // |
|
243 BoundingBox::BoundingBox() |
134 BoundingBox::BoundingBox() |
244 { |
135 { |
245 reset(); |
136 reset(); |
246 } |
137 } |
247 |
138 |