/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * Copyright 2015 Danny Robson */ #include "matrix.hpp" using util::matrix; /////////////////////////////////////////////////////////////////////////////// template T util::determinant (const matrix &m) { static_assert (Rows == 2 && Cols == 2); return m[0][0] * m[1][1] - m[0][1] * m[1][0]; } template float util::determinant (const matrix<2,2,float>&); template double util::determinant (const matrix<2,2,double>&); /////////////////////////////////////////////////////////////////////////////// template matrix util::inverse (const matrix &m) { static_assert (Rows == 2 && Cols == 2); return matrix<2,2,T> {{ { m[1][1], -m[0][1], }, { -m[1][0], m[0][0], }, }} / determinant (m); } //----------------------------------------------------------------------------- template util::matrix<2,2,float> util::inverse (const matrix<2,2,float>&); template util::matrix<2,2,double> util::inverse (const matrix<2,2,double>&); /////////////////////////////////////////////////////////////////////////////// template struct util::matrix<2,2,float>; template struct util::matrix<2,2,double>;