From 269995d8e1d9900917d4ba0724518afc38b76ddb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Asr=C4=B1n=20Do=C4=9Fan?= <33391270+Syntriax@users.noreply.github.com> Date: Wed, 8 Jan 2020 23:11:13 +0300 Subject: [PATCH] Vectors --- 3DTest/SynGame.hpp | 1 + 3DTest/Vectors.hpp | 133 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 134 insertions(+) create mode 100644 3DTest/Vectors.hpp diff --git a/3DTest/SynGame.hpp b/3DTest/SynGame.hpp index 2d60818..a855310 100644 --- a/3DTest/SynGame.hpp +++ b/3DTest/SynGame.hpp @@ -8,6 +8,7 @@ #include #include #include "Timer.hpp" + #include "Vectors.hpp" #include "Window.hpp" #include "Render.hpp" #endif diff --git a/3DTest/Vectors.hpp b/3DTest/Vectors.hpp new file mode 100644 index 0000000..375db7d --- /dev/null +++ b/3DTest/Vectors.hpp @@ -0,0 +1,133 @@ +#include "SynGame.hpp" + +#pragma region Vector1 + class Vector1 + { + public: + float x; + Vector1(float = 0); + Vector1 operator+(Vector1); + Vector1 operator-(Vector1); + Vector1 operator/(Vector1); + Vector1 operator*(Vector1); + Vector1 operator+=(Vector1); + Vector1 operator-=(Vector1); + Vector1 operator/=(Vector1); + Vector1 operator*=(Vector1); + Vector1 operator/(float); + Vector1 operator*(float); + Vector1 operator/=(float); + Vector1 operator*=(float); + float Magnitude(); + Vector1 Normalized(); + }; + + Vector1::Vector1(float x) { this -> x = x; } + + Vector1 Vector1::operator+ (Vector1 parameter) { Vector1 vector = Vector1(x); vector.x += parameter.x; return vector; } + Vector1 Vector1::operator- (Vector1 parameter) { Vector1 vector = Vector1(x); vector.x -= parameter.x; return vector; } + Vector1 Vector1::operator/ (Vector1 parameter) { Vector1 vector = Vector1(x); vector.x /= parameter.x; return vector; } + Vector1 Vector1::operator* (Vector1 parameter) { Vector1 vector = Vector1(x); vector.x *= parameter.x; return vector; } + Vector1 Vector1::operator+=(Vector1 parameter) { x += parameter.x; return *this; } + Vector1 Vector1::operator-=(Vector1 parameter) { x -= parameter.x; return *this; } + Vector1 Vector1::operator/=(Vector1 parameter) { x /= parameter.x; return *this; } + Vector1 Vector1::operator*=(Vector1 parameter) { x *= parameter.x; return *this; } + + Vector1 Vector1::operator/ (float parameter) { Vector1 vector = Vector1(x); vector.x /= parameter; return vector; } + Vector1 Vector1::operator* (float parameter) { Vector1 vector = Vector1(x); vector.x *= parameter; return vector; } + Vector1 Vector1::operator/=(float parameter) { x /= parameter; return *this; } + Vector1 Vector1::operator*=(float parameter) { x *= parameter; return *this; } + + float Vector1::Magnitude() { return x; } + Vector1 Vector1::Normalized() { return Vector1(x < 0.0 ? -1.0 : 1.0); } +#pragma endregion +#pragma region Vector2 + class Vector2 : public Vector1 + { + public: + float y; + Vector2(float = 0, float = 0); + Vector2 operator+(Vector2); + Vector2 operator-(Vector2); + Vector2 operator/(Vector2); + Vector2 operator*(Vector2); + Vector2 operator+=(Vector2); + Vector2 operator-=(Vector2); + Vector2 operator/=(Vector2); + Vector2 operator*=(Vector2); + Vector2 operator/(float); + Vector2 operator*(float); + Vector2 operator/=(float); + Vector2 operator*=(float); + float Magnitude(); + Vector2 Normalized(); + }; + + Vector2::Vector2(float x, float y) : Vector1(x) { this -> y = y; } + + Vector2 Vector2::operator+ (Vector2 parameter) { Vector2 vector = Vector2(x, y); vector.x += parameter.x; vector.y += parameter.y; return vector; } + Vector2 Vector2::operator- (Vector2 parameter) { Vector2 vector = Vector2(x, y); vector.x -= parameter.x; vector.y -= parameter.y; return vector; } + Vector2 Vector2::operator/ (Vector2 parameter) { Vector2 vector = Vector2(x, y); vector.x /= parameter.x; vector.y /= parameter.y; return vector; } + Vector2 Vector2::operator* (Vector2 parameter) { Vector2 vector = Vector2(x, y); vector.x *= parameter.x; vector.y *= parameter.y; return vector; } + Vector2 Vector2::operator+=(Vector2 parameter) { x += parameter.x; y += parameter.y; return *this; } + Vector2 Vector2::operator-=(Vector2 parameter) { x -= parameter.x; y -= parameter.y; return *this; } + Vector2 Vector2::operator/=(Vector2 parameter) { x /= parameter.x; y /= parameter.y; return *this; } + Vector2 Vector2::operator*=(Vector2 parameter) { x *= parameter.x; y *= parameter.y; return *this; } + + Vector2 Vector2::operator/ (float parameter) { Vector2 vector = Vector2(x, y); vector.x /= parameter; vector.y /= parameter; return vector; } + Vector2 Vector2::operator* (float parameter) { Vector2 vector = Vector2(x, y); vector.x *= parameter; vector.y *= parameter; return vector; } + Vector2 Vector2::operator/=(float parameter) { x *= parameter; y *= parameter; return *this; } + Vector2 Vector2::operator*=(float parameter) { x /= parameter; y /= parameter; return *this; } + + float Vector2::Magnitude() { return sqrt(x*x+y*y); } + Vector2 Vector2::Normalized() + { + Vector2 vector = Vector2(x, y); + return vector / Magnitude(); + } +#pragma endregion +#pragma region Vector3 + class Vector3 : public Vector2 + { + public: + float z; + Vector3(float = 0, float = 0, float = 0); + Vector3 operator+(Vector3); + Vector3 operator-(Vector3); + Vector3 operator/(Vector3); + Vector3 operator*(Vector3); + Vector3 operator+=(Vector3); + Vector3 operator-=(Vector3); + Vector3 operator/=(Vector3); + Vector3 operator*=(Vector3); + Vector3 operator/(float); + Vector3 operator*(float); + Vector3 operator/=(float); + Vector3 operator*=(float); + float Magnitude(); + Vector3 Normalized(); + }; + + Vector3::Vector3(float x, float y, float z) : Vector2(x, y) { this -> z = z; } + + Vector3 Vector3::operator+ (Vector3 parameter) { Vector3 vector = Vector3(x, y, z); vector.x += parameter.x; vector.y += parameter.y; vector.z += parameter.z; return vector; } + Vector3 Vector3::operator- (Vector3 parameter) { Vector3 vector = Vector3(x, y, z); vector.x -= parameter.x; vector.y -= parameter.y; vector.z -= parameter.z; return vector; } + Vector3 Vector3::operator/ (Vector3 parameter) { Vector3 vector = Vector3(x, y, z); vector.x /= parameter.x; vector.y /= parameter.y; vector.z /= parameter.z; return vector; } + Vector3 Vector3::operator* (Vector3 parameter) { Vector3 vector = Vector3(x, y, z); vector.x *= parameter.x; vector.y *= parameter.y; vector.z *= parameter.z; return vector; } + Vector3 Vector3::operator+=(Vector3 parameter) { x += parameter.x; y += parameter.y; z += parameter.z; return *this; } + Vector3 Vector3::operator-=(Vector3 parameter) { x -= parameter.x; y -= parameter.y; z -= parameter.z; return *this; } + Vector3 Vector3::operator/=(Vector3 parameter) { x /= parameter.x; y /= parameter.y; z /= parameter.z; return *this; } + Vector3 Vector3::operator*=(Vector3 parameter) { x *= parameter.x; y *= parameter.y; z *= parameter.z; return *this; } + + Vector3 Vector3::operator/=(float parameter) { x *= parameter; y *= parameter; z *= parameter; return *this; } + Vector3 Vector3::operator*=(float parameter) { x /= parameter; y /= parameter; z /= parameter; return *this; } + Vector3 Vector3::operator/ (float parameter) { Vector3 vector = Vector3(x, y, z); vector.x /= parameter; vector.y /= parameter; vector.z /= parameter; return vector; } + Vector3 Vector3::operator* (float parameter) { Vector3 vector = Vector3(x, y, z); vector.x *= parameter; vector.y *= parameter; vector.z *= parameter; return vector; } + + float Vector3::Magnitude() { return sqrt(x*x+y*y+z*z); } + Vector3 Vector3::Normalized() + { + Vector3 vector = Vector3(x, y, z); + return vector / Magnitude(); + } +#pragma endregion \ No newline at end of file