diff options
| -rw-r--r-- | matrix.cpp | 45 | ||||
| -rw-r--r-- | matrix.h | 26 | ||||
| -rw-r--r-- | vector.cpp | 133 | ||||
| -rw-r--r-- | vector.h | 58 | 
4 files changed, 262 insertions, 0 deletions
| diff --git a/matrix.cpp b/matrix.cpp new file mode 100644 index 0000000..5970123 --- /dev/null +++ b/matrix.cpp @@ -0,0 +1,45 @@ +#include "matrix.h" + +#include <cmath> + +Matrix2::Matrix2() { +	m[0][0] = m[0][1] =  +	m[1][0] = m[1][1] = 0; +} + +Matrix2::Matrix2(float m00, float m01, float m10, float m11) { +	m[0][0] = m00; +	m[0][1] = m01; +	m[1][0] = m10; +	m[1][1] = m11; +} + +Matrix2 Matrix2::operator*(const Matrix2& mat) { +	return Matrix2( +		m[0][0] * mat.m[0][0] + m[0][1] * mat.m[1][0], +		m[0][0] * mat.m[0][1] + m[0][1] * mat.m[1][1], +		m[1][0] * mat.m[0][0] + m[1][1] * mat.m[1][0], +		m[1][0] * mat.m[0][1] + m[1][1] * mat.m[1][1]); +} + +Matrix2 Matrix2::operator*(float f) { +	return Matrix2( +		m[0][0] * f, +		m[0][1] * f, +		m[1][0] * f, +		m[1][1] * f); +} + +Vector2 Matrix2::operator*(const Vector2& v) { +	return Vector2( +		m[0][0] * v.x + m[0][1] * v.y, +		m[1][0] * v.x + m[1][1] * v.y); +} + +Matrix2 rotation_matrix(float rot) { +	float s = sinf(rot); +	float c = cosf(rot); +	return Matrix2( +	c, -s, +	s, c); +}
\ No newline at end of file diff --git a/matrix.h b/matrix.h new file mode 100644 index 0000000..8be483a --- /dev/null +++ b/matrix.h @@ -0,0 +1,26 @@ +#ifndef MATRIX_H +#define MATRIX_H + +#include "vector.h" + +template<int M, int N> +class Matrix { +	public: +		float m[M][N]; +}; + +class Matrix2 : Matrix<2, 2> { +	public: +		Matrix2(); +		Matrix2(float m00, float m01, float m10, float m11); +		 +		Matrix2 operator*(const Matrix2& mat); +		 +		Matrix2 operator*(float f); +		 +		Vector2 operator*(const Vector2& v); +}; + +Matrix2 rotation_matrix(float rot); + +#endif diff --git a/vector.cpp b/vector.cpp new file mode 100644 index 0000000..6c71991 --- /dev/null +++ b/vector.cpp @@ -0,0 +1,133 @@ +#include "vector.h" + +Vector2::Vector2() { +	x = y = 0; +} + +Vector2::Vector2(float p1, float p2) { +	x = p1; +	y = p2; +} + +Vector2::Vector2(const Vector2& v) { +	x = v.x; +	y = v.y; +} + +Vector2& Vector2::operator=(const Vector2& v) { +	x = v.x; +	y = v.y; +	return *this; +} + +Vector2& Vector2::operator+=(const Vector2& v) { +	x += v.x; +	y += v.y; +	return *this; +} + +Vector2& Vector2::operator+(const Vector2& v) { +	return Vector2(*this) += v; +} + +Vector2& Vector2::operator-=(const Vector2& v) { +	x -= v.x; +	y -= v.y; +	return *this; +} + +Vector2& Vector2::operator-(const Vector2& v) { +	return Vector2(*this) -= v; +} + +Vector3::Vector3() : Vector2() { +	z = 0; +} + +Vector3::Vector3(float p1, float p2, float p3) { +	x = p1; +	y = p2; +	z = p3; +} + +Vector3::Vector3(const Vector3& v) { +	x = v.x; +	y = v.y; +	z = v.z; +} + +Vector3& Vector3::operator=(const Vector3& v) { +	x = v.x; +	y = v.y; +	z = v.z; +	return *this; +} + +Vector3& Vector3::operator+=(const Vector3& v) { +	x += v.x; +	y += v.y; +	z += v.z; +	return *this; +} + +Vector3& Vector3::operator+(const Vector3& v) { +	return Vector3(*this) += v; +} + +Vector3& Vector3::operator-=(const Vector3& v) { +	x -= v.x; +	y -= v.y; +	z -= v.z; +	return *this; +} + +Vector3& Vector3::operator-(const Vector3& v) { +	return Vector3(*this) -= v; +} + +Vector4::Vector4() : Vector3() { +	w = 0; +} + +Vector4::Vector4(float p1, float p2, float p3, float p4) : Vector3(p1, p2, p3) { +	w = p4; +} + +Vector4::Vector4(const Vector4& v) { +	x = v.x; +	y = v.y; +	z = v.z; +	w = v.w; +} + +Vector4& Vector4::operator=(const Vector4& v) { +	x = v.x; +	y = v.y; +	z = v.z; +	w = v.w; +	return *this; +} + +Vector4& Vector4::operator+=(const Vector4& v) { +	x += v.x; +	y += v.y; +	z += v.z; +	w += v.w; +	return *this; +} + +Vector4& Vector4::operator+(const Vector4& v) { +	return Vector4(*this) += v; +} + +Vector4& Vector4::operator-=(const Vector4& v) { +	x -= v.x; +	y -= v.y; +	z -= v.z; +	w -= v.w; +	return *this; +} + +Vector4& Vector4::operator-(const Vector4& v) { +	return Vector4(*this) -= v; +} diff --git a/vector.h b/vector.h new file mode 100644 index 0000000..8d85684 --- /dev/null +++ b/vector.h @@ -0,0 +1,58 @@ +#ifndef _VECTOR_H_ +#define _VECTOR_H_ + +class Vector2 { +	public: +		union { +			float x, r; +		}; +		union { +			float y, g; +		}; +		 +		Vector2(); +		Vector2(float p1, float p2); +		Vector2(const Vector2& v); +		 +		Vector2& operator=(const Vector2& v); +		Vector2& operator+=(const Vector2& v); +		Vector2& operator+(const Vector2& v); +		Vector2& operator-=(const Vector2& v); +		Vector2& operator-(const Vector2& v); +}; + +class Vector3 : public Vector2 { +	public: +		union { +			float z, b; +		}; +		 +		Vector3(); +		Vector3(float p1, float p2, float p3); +		Vector3(const Vector3& v); +		 +		Vector3& operator=(const Vector3& v); +		Vector3& operator+=(const Vector3& v); +		Vector3& operator+(const Vector3& v); +		Vector3& operator-=(const Vector3& v); +		Vector3& operator-(const Vector3& v); +}; + +class Vector4 : public Vector3 { +	public: +		union { +			float w, a; +		}; + +		Vector4(); +		Vector4(float p1, float p2, float p3, float p4); +		Vector4(const Vector4& v); + +		Vector4& operator=(const Vector4& v); +		Vector4& operator+=(const Vector4& v); +		Vector4& operator+(const Vector4& v); +		Vector4& operator-=(const Vector4& v); +		Vector4& operator-(const Vector4& v); +}; + +#endif | 
