App: Add Vector2 and Vector3 implementation

This commit is contained in:
Eero Holmala 2023-04-28 13:38:39 +03:00
parent c408c76027
commit e57bd40991
3 changed files with 155 additions and 12 deletions

View File

@ -42,7 +42,10 @@
"xstddef": "cpp",
"xstring": "cpp",
"xtr1common": "cpp",
"xutility": "cpp"
"xutility": "cpp",
"list": "cpp",
"vector": "cpp",
"xtree": "cpp"
},
"cmake.configureOnOpen": true
}

View File

@ -8,6 +8,9 @@ namespace Core
class Vector2
{
public:
float x;
float y;
Vector2();
Vector2(float x, float y);
@ -15,18 +18,15 @@ namespace Core
Vector2 operator-(Vector2 const& other);
Vector2 operator*(Vector2 const& other);
Vector2 operator/(Vector2 const& other);
Vector2 operator+=(Vector2 const& other);
Vector2 operator-=(Vector2 const& other);
Vector2 operator*=(Vector2 const& other);
Vector2 operator/=(Vector2 const& other);
Vector2& operator+=(Vector2 const& other);
Vector2& operator-=(Vector2 const& other);
Vector2& operator*=(Vector2 const& other);
Vector2& operator/=(Vector2 const& other);
bool operator==(Vector2 const& other);
bool operator!=(Vector2 const& other);
Vector2 operator*(float const& scalar);
float x;
float y;
};
class Vector3
@ -37,14 +37,18 @@ namespace Core
float z;
float w;
Vector3();
Vector3(float x, float y, float z);
Vector3(float x, float y, float z, float w);
Vector3 operator+(Vector3 const& other);
Vector3 operator-(Vector3 const& other);
Vector3 operator*(Vector3 const& other);
Vector3 operator/(Vector3 const& other);
Vector3 operator+=(Vector3 const& other);
Vector3 operator-=(Vector3 const& other);
Vector3 operator*=(Vector3 const& other);
Vector3 operator/=(Vector3 const& other);
Vector3& operator+=(Vector3 const& other);
Vector3& operator-=(Vector3 const& other);
Vector3& operator*=(Vector3 const& other);
Vector3& operator/=(Vector3 const& other);
bool operator==(Vector3 const& other);
bool operator!=(Vector3 const& other);

View File

@ -27,7 +27,143 @@ namespace Core
Vector2 Vector2::operator/(Vector2 const &other)
{
// TODO(Eero): Add Zero checks
return Vector2(this->x/other.x, this->y/other.y);
}
Vector2& Vector2::operator+=(Vector2 const &other)
{
this->x += other.x;
this->y += other.y;
return *this;
}
Vector2& Vector2::operator-=(Vector2 const &other)
{
this->x -= other.x;
this->y -= other.y;
return *this;
}
Vector2& Vector2::operator*=(Vector2 const &other)
{
this->x *= other.x;
this->y *= other.y;
return *this;
}
Vector2& Vector2::operator/=(Vector2 const &other)
{
// TODO(Eero): Add Zero checks
this->x /= other.x;
this->y /= other.y;
return *this;
}
bool Vector2::operator==(Vector2 const &other)
{
return (this->x == other.x && this->y == other.y) ? true : false;
}
bool Vector2::operator!=(Vector2 const &other)
{
return (this->x != other.x || this->y != other.y) ? true : false;
}
Vector2 Vector2::operator*(float const &scalar)
{
return Vector2(scalar * this->x, scalar * this->y);
}
Vector3::Vector3() : x(0), y(0), z(0), w(1)
{
}
Vector3::Vector3(float x, float y, float z) : x(x), y(y), z(z), w(1)
{
}
Vector3::Vector3(float x, float y, float z, float w) : x(x), y(y), z(z), w(w)
{
}
Vector3 Vector3::operator+(Vector3 const &other)
{
return Vector3(this->x+other.x, this->y+other.y, this->z+other.z);
}
Vector3 Vector3::operator-(Vector3 const &other)
{
return Vector3(this->x-other.x, this->y-other.y, this->z-other.z);
}
Vector3 Vector3::operator*(Vector3 const &other)
{
return Vector3(this->x*other.x, this->y*other.y, this->z*other.z);
}
Vector3 Vector3::operator/(Vector3 const &other)
{
// TODO(Eero): Add Zero checks
return Vector3(this->x/other.x, this->y/other.y, this->z/other.z);
}
Vector3& Vector3::operator+=(Vector3 const &other)
{
this->x += other.x;
this->y += other.y;
this->z += other.z;
return *this;
}
Vector3& Vector3::operator-=(Vector3 const &other)
{
this->x -= other.x;
this->y -= other.y;
this->z -= other.z;
return *this;
}
Vector3& Vector3::operator*=(Vector3 const &other)
{
this->x *= other.x;
this->y *= other.y;
this->z *= other.z;
return *this;
}
Vector3& Vector3::operator/=(Vector3 const &other)
{
// TODO(Eero): Add Zero checks
this->x /= other.x;
this->y /= other.y;
this->z /= other.z;
return *this;
}
bool Vector3::operator==(Vector3 const &other)
{
return (
this->x == other.x
&& this->y == other.y
&& this->z == other.z
&& this->w == other.w // TODO(Eero): Is w check required?
) ? true : false;
}
bool Vector3::operator!=(Vector3 const &other)
{
return (
this->x != other.x
|| this->y != other.y
|| this->z != other.z
|| this->w != other.w // TODO(Eero): Is w check required?
) ? true : false;
}
Vector3 Vector3::operator*(float const &scalar)
{
return Vector3(scalar * this->x, scalar * this->y, scalar * this->z);
}
} // namespace Core