#pragma once #include struct Vec2d { double x; double y; double length() { return sqrt(x*x + y*y); } double distance(Vec2d other) { Vec2d tmp = (*this - other); return tmp.length(); } Vec2d & operator+=(const Vec2d& rhs) { x+=rhs.x; y+=rhs.y; return *this; } Vec2d & operator-=(const Vec2d& rhs) { x-=rhs.x; y-=rhs.y; return *this; } Vec2d & operator*=(const double& rhs) { x*=rhs; y*=rhs; return *this; } Vec2d & operator/=(const double& rhs) { x/=rhs; y/=rhs; return *this; } const Vec2d operator+(const Vec2d& rhs) const { Vec2d result = *this; result += rhs; return result; } const Vec2d operator-(const Vec2d& rhs) const { Vec2d result = *this; result -= rhs; return result; } const double operator*(const Vec2d& rhs) const { return (this->x * rhs.x) + (this->y * rhs.y); } const Vec2d operator*(const double& rhs) const { Vec2d result = *this; result *= rhs; return result; } const Vec2d operator/(const double& rhs) const { Vec2d result = *this; result /= rhs; return result; } }; /* struct Mat4d { std::array data; const Mat4d operator*(const Mat4d& rhs) const { Mat4d result; result[0] = result[0]*rhs[0] + result[1]*result[5] + result[2]*result[9] + result[3]*result[13]; result[1] = result[0]*rhs[1] + result[1]*result[6] + result[2]*result[10] + result[3]*result[14]; result[2] = result[0]*rhs[2] + result[1]*result[7] + result[2]*result[11] + result[3]*result[15]; result[3] = result[0]*rhs[3] + result[1]*result[8] + result[2]*result[12] + result[3]*result[16]; result[4] = result[4]*rhs[0] + result[5]*result[5] + result[6]*result[9] + result[7]*result[13]; result[5] = result[4]*rhs[1] + result[5]*result[6] + result[6]*result[10] + result[7]*result[14]; result[6] = result[4]*rhs[2] + result[5]*result[7] + result[6]*result[11] + result[7]*result[15]; result[7] = result[4]*rhs[3] + result[5]*result[8] + result[6]*result[12] + result[7]*result[16]; result[8] = result[8]*rhs[0] + result[9]*result[5] + result[10]*result[9] + result[11]*result[13]; result[9] = result[8]*rhs[1] + result[9]*result[6] + result[10]*result[10] + result[11]*result[14]; result[10] = result[8]*rhs[2] + result[9]*result[7] + result[10]*result[11] + result[11]*result[15]; result[11] = result[8]*rhs[3] + result[9]*result[8] + result[10]*result[12] + result[11]*result[16]; result[12] = result[12]*rhs[0] + result[13]*result[5] + result[14]*result[9] + result[15]*result[13]; result[13] = result[12]*rhs[1] + result[13]*result[6] + result[14]*result[10] + result[15]*result[14]; result[14] = result[12]*rhs[2] + result[13]*result[7] + result[14]*result[11] + result[15]*result[15]; result[15] = result[12]*rhs[3] + result[13]*result[8] + result[14]*result[12] + result[15]*result[16]; return result; } }; */