90 lines
2.9 KiB
C++
90 lines
2.9 KiB
C++
#pragma once
|
|
|
|
#include <math.h>
|
|
|
|
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<double, 16> 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;
|
|
}
|
|
};
|
|
*/
|