CSC8502_Advanced_Graphics_For_Games / nclgl / Matrix2.cpp
Matrix2.cpp
Raw
/*
Part of Newcastle University's Game Engineering source code.

Use as you see fit!

Comments and queries to: richard-gordon.davison AT ncl.ac.uk
https://research.ncl.ac.uk/game/
*/
#include "Matrix2.h"
#include "common.h"

Matrix2::Matrix2(void)	{
	values[0] = 1.0f;
	values[1] = 0.0f;
	values[2] = 0.0f;
	values[3] = 1.0f;
}

Matrix2::Matrix2(float elements[4]) {
	values[0] = elements[0];
	values[1] = elements[1];
	values[2] = elements[2];
	values[3] = elements[3];
}

Matrix2::Matrix2(const Vector2& a, const Vector2& b) {
	values[0] = a.x;
	values[1] = b.x;
	values[2] = a.y;
	values[3] = b.y;
};

Matrix2::~Matrix2(void)	{
}

void Matrix2::ToZero() {
	values[0] = 0.0f;
	values[1] = 0.0f;
	values[2] = 0.0f;
	values[3] = 0.0f;
}

Matrix2 Matrix2::Rotation(float degrees)	{
	Matrix2 mat;

	float radians = (float)DegToRad(degrees);
	float s = sin(radians);
	float c = cos(radians);

	mat.values[0] = c;
	mat.values[1] = s;
	mat.values[2] = -s;
	mat.values[3] = c;

	return mat;
}
//This is going to assume that the matrix is actually invertable!
void Matrix2::Invert() {
	float determinant = (values[0] * values[3]) - (values[1] * values[2]);
	float invDet = 1.0f / determinant; //Turn our divides into multiplies!

	values[0] = values[3]  * invDet;
	values[1] = -values[2] * invDet;
	values[2] = -values[1] * invDet;
	values[3] = values[0]  * invDet;
}

Matrix2 Matrix2::Inverse() const {
	Matrix2 newMatrix = *this;
	newMatrix.Invert();
	return newMatrix;
}