rawaccel/common/math-vec2.hpp
2021-09-23 22:28:44 -04:00

36 lines
648 B
C++

#pragma once
#define _USE_MATH_DEFINES
#include <math.h>
template <typename T>
struct vec2 {
T x;
T y;
};
using vec2d = vec2<double>;
inline vec2d direction(double degrees)
{
double radians = degrees * M_PI / 180;
return { cos(radians), sin(radians) };
}
constexpr vec2d rotate(const vec2d& v, const vec2d& direction)
{
return {
v.x * direction.x - v.y * direction.y,
v.x * direction.y + v.y * direction.x
};
}
inline double magnitude(const vec2d& v)
{
return sqrt(v.x * v.x + v.y * v.y);
}
inline double lp_distance(const vec2d& v, double p)
{
return pow(pow(v.x, p) + pow(v.y, p), 1 / p);
}