src/basics.cpp

changeset 1037
4a9185e94d78
parent 1036
993c46d7eb75
child 1053
2a48c0fff107
equal deleted inserted replaced
1036:993c46d7eb75 1037:4a9185e94d78
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

mercurial