81 constexpr T &
operator[](
const int index) {
return index ? y : x; }
82 constexpr const T &
operator[](
const int index)
const {
return index ? y : x; }
89 float s = std::sin(
angle);
90 float c = std::cos(
angle);
91 return vector2_base<T>(
static_cast<T
>(c * a.x - s * a.y),
static_cast<T
>(s * a.x + c * a.y));
109 return a.x * b.x + a.y * b.y;
112template<std::
floating_po
int T>
115 return std::sqrt(
dot(a, a));
118template<std::
integral T>
121 return std::sqrt(
static_cast<float>(
dot(a, a)));
131 if(a.x == 0 && a.y == 0)
134 return a.y < 0 ? -
pi / 2 :
pi / 2;
135 float result = std::atan(a.y / a.x);
137 result = result +
pi;
151 float divisor =
length(v);
154 float l = 1.0f / divisor;
176 T SquaredMagnitudeAB =
dot(AB, AB);
177 if(SquaredMagnitudeAB > 0)
180 T APdotAB =
dot(AP, AB);
181 T t = APdotAB / SquaredMagnitudeAB;
182 out_pos = line_pointA + AB * std::clamp(t, (T)0, (T)1);
193 vec2 Delta = LineEnd - LineStart;
194 vec2 Offset = LineStart - CircleCenter;
198 float B = 2.0f *
dot(Offset, Delta);
199 float C =
dot(Offset, Offset) - Radius * Radius;
201 float Discriminant =
B *
B - 4.0f * A * C;
202 if(Discriminant < 0.0f || A == 0.0f)
207 else if(Discriminant == 0.0f)
210 float Time = -
B / (2.0f * A);
211 aIntersections[0] = LineStart + Delta * Time;
216 Discriminant = std::sqrt(Discriminant);
217 float Time1 = (-
B - Discriminant) / (2.0f * A);
218 float Time2 = (-
B + Discriminant) / (2.0f * A);
220 aIntersections[0] = LineStart + Delta * Time1;
221 aIntersections[1] = LineStart + Delta * Time2;
315 return a.x * b.x + a.y * b.y + a.z * b.z;
322 a.y * b.z - a.z * b.y,
323 a.z * b.x - a.x * b.z,
324 a.x * b.y - a.y * b.x);
330 return std::sqrt(
dot(a, a));
335 float divisor =
length(v);
338 float l = 1.0f / divisor;
371 x(nx), y(ny), z(nz), w(nw)
432 constexpr bool operator==(
const vector4_base &vec)
const {
return x == vec.x && y == vec.y && z == vec.z && w == vec.w; }
433 constexpr bool operator!=(
const vector4_base &vec)
const {
return x != vec.x || y != vec.y || z != vec.z || w != vec.w; }
constexpr bool operator!=(const vector2_base &vec) const
Definition vmath.h:79
constexpr vector2_base operator*(const T rhs) const
Definition vmath.h:36
constexpr vector2_base operator*(const vector2_base &vec) const
Definition vmath.h:37
constexpr vector2_base operator+(const vector2_base &vec) const
Definition vmath.h:35
constexpr vector2_base(T nx, T ny)
Definition vmath.h:28
constexpr vector2_base operator/(const vector2_base &vec) const
Definition vmath.h:39
constexpr vector2_base operator-() const
Definition vmath.h:33
constexpr const T & operator[](const int index) const
Definition vmath.h:82
constexpr vector2_base & operator/=(const T rhs)
Definition vmath.h:65
constexpr vector2_base & operator*=(const vector2_base &vec)
Definition vmath.h:59
constexpr vector2_base & operator-=(const vector2_base &vec)
Definition vmath.h:47
constexpr bool operator==(const vector2_base &vec) const
Definition vmath.h:78
constexpr vector2_base()=default
constexpr vector2_base & operator*=(const T rhs)
Definition vmath.h:53
constexpr vector2_base operator-(const vector2_base &vec) const
Definition vmath.h:34
constexpr vector2_base operator/(const T rhs) const
Definition vmath.h:38
constexpr vector2_base & operator/=(const vector2_base &vec)
Definition vmath.h:71
constexpr T & operator[](const int index)
Definition vmath.h:81
constexpr vector2_base & operator+=(const vector2_base &vec)
Definition vmath.h:41
constexpr vector3_base()=default
constexpr vector3_base & operator+=(const vector3_base &vec)
Definition vmath.h:259
constexpr vector3_base operator*(const T rhs) const
Definition vmath.h:254
constexpr vector3_base operator-(const vector3_base &vec) const
Definition vmath.h:251
constexpr vector3_base & operator/=(const T rhs)
Definition vmath.h:287
constexpr bool operator==(const vector3_base &vec) const
Definition vmath.h:302
constexpr vector3_base & operator-=(const vector3_base &vec)
Definition vmath.h:266
constexpr vector3_base & operator/=(const vector3_base &vec)
Definition vmath.h:294
constexpr vector3_base operator/(const T rhs) const
Definition vmath.h:256
constexpr vector3_base operator/(const vector3_base &vec) const
Definition vmath.h:257
constexpr vector3_base & operator*=(const T rhs)
Definition vmath.h:273
constexpr bool operator!=(const vector3_base &vec) const
Definition vmath.h:303
constexpr vector3_base operator+(const vector3_base &vec) const
Definition vmath.h:253
constexpr vector3_base operator*(const vector3_base &vec) const
Definition vmath.h:255
constexpr vector3_base & operator*=(const vector3_base &vec)
Definition vmath.h:280
constexpr vector3_base operator-() const
Definition vmath.h:252
constexpr vector3_base(T nx, T ny, T nz)
Definition vmath.h:246
constexpr vector4_base & operator/=(const vector4_base &vec)
Definition vmath.h:423
constexpr bool operator!=(const vector4_base &vec) const
Definition vmath.h:433
constexpr vector4_base operator+(const vector4_base &vec) const
Definition vmath.h:375
constexpr vector4_base operator/(const vector4_base &vec) const
Definition vmath.h:380
constexpr vector4_base & operator/=(const T rhs)
Definition vmath.h:415
constexpr vector4_base operator-(const vector4_base &vec) const
Definition vmath.h:376
constexpr vector4_base(T nx, T ny, T nz, T nw)
Definition vmath.h:370
constexpr vector4_base & operator*=(const vector4_base &vec)
Definition vmath.h:407
constexpr vector4_base & operator*=(const T rhs)
Definition vmath.h:399
constexpr vector4_base()=default
constexpr vector4_base operator*(const T rhs) const
Definition vmath.h:379
constexpr vector4_base operator/(const T vec) const
Definition vmath.h:381
constexpr vector4_base & operator+=(const vector4_base &vec)
Definition vmath.h:383
constexpr vector4_base & operator-=(const vector4_base &vec)
Definition vmath.h:391
constexpr vector4_base operator*(const vector4_base &vec) const
Definition vmath.h:378
constexpr vector4_base operator-() const
Definition vmath.h:377
constexpr bool operator==(const vector4_base &vec) const
Definition vmath.h:432
constexpr float pi
Definition math.h:14
float random_angle()
Definition math.h:77
vector4_base< int > ivec4
Definition vmath.h:438
constexpr float angle(const vector2_base< float > &a)
Definition vmath.h:129
vector2_base< float > normalize(const vector2_base< float > &v)
Definition vmath.h:149
vector4_base< uint8_t > ubvec4
Definition vmath.h:439
constexpr float length_squared(const vector2_base< float > &a)
Definition vmath.h:124
constexpr vector3_base< T > cross(const vector3_base< T > &a, const vector3_base< T > &b)
Definition vmath.h:319
vector2_base< float > direction(float angle)
Definition vmath.h:158
float length(const vector2_base< T > &a)
Definition vmath.h:113
vector4_base< bool > bvec4
Definition vmath.h:437
vector3_base< float > vec3
Definition vmath.h:342
vector4_base< float > vec4
Definition vmath.h:436
vector2_base< int > ivec2
Definition vmath.h:170
T distance_squared(const vector2_base< T > a, const vector2_base< T > &b)
Definition vmath.h:101
vector3_base< int > ivec3
Definition vmath.h:344
constexpr int intersect_line_circle(const vec2 LineStart, const vec2 LineEnd, const vec2 CircleCenter, float Radius, vec2 aIntersections[2])
Definition vmath.h:191
vector2_base< bool > bvec2
Definition vmath.h:169
vector2_base< float > random_direction()
Definition vmath.h:163
vector3_base< bool > bvec3
Definition vmath.h:343
constexpr vector2_base< T > rotate(const vector2_base< T > &a, float angle)
Definition vmath.h:86
vector2_base< float > vec2
Definition vmath.h:168
constexpr vector2_base< T > normalize_pre_length(const vector2_base< T > &v, T len)
Definition vmath.h:142
constexpr bool closest_point_on_line(vector2_base< T > line_pointA, vector2_base< T > line_pointB, vector2_base< T > target_point, vector2_base< T > &out_pos)
Definition vmath.h:173
constexpr T dot(const vector2_base< T > a, const vector2_base< T > &b)
Definition vmath.h:107
T distance(const vector2_base< T > a, const vector2_base< T > &b)
Definition vmath.h:95