Files
viseq/src/datatypes.h
T
2024-10-10 02:59:27 +02:00

103 lines
2.0 KiB
C++

#pragma once
#include <cmath>
#include <math.h>
// 2D Vectors
template<typename T>
class Vec2D{
public:
Vec2D() {};
Vec2D(T x, T y) : x(x), y(y) {}
T x = 0;
T y = 0;
T dist(Vec2D* v) { return sqrt(pow((v->x - x), 2) + pow((v->y - y), 2));};
T length() { return sqrt(pow(x, 2) + pow(y, 2));};
T angle(Vec2D &v){
T angle = atan2(v.y, v.x) - atan2(y,x);
if(angle > M_PI) angle -= M_PI_2;
if(angle < -M_PI) angle += M_PI_2;
return angle;
//return acos(dot(v));
};
T angleDeg(Vec2D &v){
return angle(v) * 180 / M_PI;
};
T dot(Vec2D &v){
return (x*v.x) + (y*v.y);
};
Vec2D& norm() { return *this * (1.0/length());};
Vec2D& operator=(const Vec2D& vec){
if (this == &vec){
return *this;
}
x = vec.x;
y = vec.y;
return *this;
};
Vec2D& operator+=(const Vec2D& vec){
this->x += vec.x;
this->y += vec.y;
return *this;
};
friend Vec2D operator+(const Vec2D& left, const Vec2D& right){
return Vec2D(left.x + right.x, left.y + right.y);
};
Vec2D& operator-=(const Vec2D& vec){
this->x -= vec.x;
this->y -= vec.y;
return *this;
};
friend Vec2D operator-(const Vec2D& left, const Vec2D& right){
return Vec2D(left.x - right.x, left.y - right.y);
};
Vec2D& operator*(const Vec2D& vec){
this->x *= vec.x;
this->y *= vec.y;
return *this;
};
Vec2D& operator*(T scalar){
this->x *= scalar;
this->y *= scalar;
return *this;
};
};
struct Color{
int r;
int g;
int b;
};
/*template <typename T>*/
/*bool contains(T X, T Y) {*/
/* for (unsigned int i=0;i<Coords.size()-2;i+=2)*/
/* {*/
/* if (((Y-Coords[i+1])*(Coords[i+2]-Coords[i]) - (X-Coords[i])*(Coords[i+3]-Coords[i+1]))<0)*/
/* {*/
/* return (false);*/
/* }*/
/* }*/
/* //The last test is special*/
/* unsigned int j = Coords.size();*/
/* if (((Y-Coords[j-1])*(Coords[0]-Coords[j-2]) - (X-Coords[j-2])*(Coords[1]-Coords[j-1]))<0)*/
/* {*/
/* return (false);*/
/* }*/
/* return (true);*/
/*}*/