src/basics.cpp

changeset 1219
8e39b5d7c562
parent 1218
e0b59d183f96
child 1222
34def2630300
--- a/src/basics.cpp	Thu Jan 04 19:52:24 2018 +0200
+++ b/src/basics.cpp	Thu Jan 04 20:21:36 2018 +0200
@@ -129,117 +129,78 @@
 	return false;
 }
 
-// =============================================================================
-//
-Matrix::Matrix(double vals[])
+Matrix::Matrix() :
+	coefficients {1, 0, 0, 0, 1, 0, 0, 0, 1} {}
+
+Matrix::Matrix(std::initializer_list<double> values)
 {
-	for (int i = 0; i < 9; ++i)
-		m_vals[i] = vals[i];
-}
-
-// =============================================================================
-//
-Matrix::Matrix(double fillval)
-{
-	for (int i = 0; i < 9; ++i)
-		m_vals[i] = fillval;
+	if (values.size() == 9)
+		memcpy(&coefficients[0], values.begin(), sizeof coefficients);
 }
 
-// =============================================================================
-//
-Matrix::Matrix(const std::initializer_list<double>& vals)
-{
-	if (vals.size() == 9)
-		memcpy(&m_vals[0], vals.begin(), sizeof m_vals);
-}
-
-// =============================================================================
-//
-void Matrix::dump() const
-{
-	for (int i = 0; i < 3; ++i)
-	{
-		for (int j = 0; j < 3; ++j)
-			print("%1\t", m_vals[i * 3 + j]);
-
-		print("\n");
-	}
-}
-
-// =============================================================================
-//
 QString Matrix::toString() const
 {
 	QString val;
 
-	for (int i = 0; i < 9; ++i)
+	for (int i = 0; i < countof(coefficients); ++i)
 	{
 		if (i > 0)
 			val += ' ';
 
-		val += QString::number(m_vals[i]);
+		val += QString::number(coefficients[i]);
 	}
 
 	return val;
 }
 
-// =============================================================================
-//
 void Matrix::zero()
 {
-	memset(&m_vals[0], 0, sizeof m_vals);
+	for (int i = 0; i < countof(coefficients); ++i)
+		coefficients[i] = 0;
 }
 
-// =============================================================================
-//
-Matrix Matrix::mult(const Matrix& other) const
+Matrix Matrix::operator*(const Matrix& other) const
 {
-	Matrix val;
-	val.zero();
+	Matrix result;
+	result.zero();
 
 	for (int i = 0; i < 3; ++i)
 	for (int j = 0; j < 3; ++j)
 	for (int k = 0; k < 3; ++k)
-		val[(i * 3) + j] += m_vals[(i * 3) + k] * other[(k * 3) + j];
+		result(i, j) += (*this)(i, k) * other(k, j);
 
-	return val;
+	return result;
 }
 
-// =============================================================================
-//
-Matrix& Matrix::operator= (const Matrix& other)
+Matrix& Matrix::operator=(const Matrix& other)
 {
-	memcpy(&m_vals[0], &other.m_vals[0], sizeof m_vals);
+	for (int i = 0; i < countof(coefficients); ++i)
+		(*this)[i] = other[i];
 	return *this;
 }
 
-// =============================================================================
-//
-double Matrix::getDeterminant() const
+double Matrix::determinant() const
 {
-	return (value(0) * value(4) * value(8)) +
-		  (value(1) * value(5) * value(6)) +
-		  (value(2) * value(3) * value(7)) -
-		  (value(2) * value(4) * value(6)) -
-		  (value(1) * value(3) * value(8)) -
-		  (value(0) * value(5) * value(7));
+	return
+		(*this)(0, 0) * (*this)(1, 1) * (*this)(2, 2) +
+		(*this)(0, 1) * (*this)(1, 2) * (*this)(2, 0) +
+		(*this)(0, 2) * (*this)(1, 0) * (*this)(2, 1) -
+		(*this)(0, 2) * (*this)(1, 1) * (*this)(2, 0) -
+		(*this)(0, 1) * (*this)(1, 0) * (*this)(2, 2) -
+		(*this)(0, 0) * (*this)(1, 2) * (*this)(2, 1);
 }
 
-// =============================================================================
-//
 bool Matrix::operator== (const Matrix& other) const
 {
-	for (int i = 0; i < 9; ++i)
+	for (int i = 0; i < countof(coefficients); ++i)
 	{
-		if (value(i) != other[i])
+		if ((*this)[i] != other[i])
 			return false;
 	}
 
 	return true;
 }
 
-// =============================================================================
-//
 LDBoundingBox::LDBoundingBox()
 {
 	reset();

mercurial