#ifndef MATRIX_H #define MATRIX_H MATRIX_H #include "Vector.h" #include class Matrix { public: Matrix(); typedef double Matrix_row_t[4]; Matrix_row_t & operator[](int idx) { return m_matrix[idx]; } const Matrix_row_t & operator[](int idx) const { return m_matrix[idx]; } static Matrix identity(); double determinant(); protected: double m_matrix[4][4]; double m_inverse[4][4]; bool m_inverse_calculated; bool m_inverse_valid; void calculateInverse(); }; Matrix operator*(const Matrix & m1, const Matrix & m2); Vector operator*(const Matrix & m, const Vector & v); bool operator==(const Matrix & m1, const Matrix & m2); std::ostream & operator<<(std::ostream & out, const Matrix & m); #endif