Vec2.h
Vec2.h
CPP1/* Copyright Statement:2 *3 * (C) 2021-2024 Cubios Inc. All rights reserved.4 */56#ifndef WASMLIBS_CPP_VEC2_H_7#define WASMLIBS_CPP_VEC2_H_89#include "Math.h"1011namespace Cubios12{13namespace Math14{15class Vec216{17public:18 /// constructors19 Vec2();20 Vec2(const float _x, const float _y);21 Vec2(const Vec2& vec);22 Vec2(const float* p);23 void Set(const float _x, const float _y);24 void Set(const Vec2& vec);25 void Set(const float* p);26 float Len() const;27 void Norm();2829 void operator+=(const Vec2& v0);30 void operator-=(const Vec2& v0);31 void operator*=(const float s);32 void operator/=(const float s);3334 bool IsEqual(const Vec2& v, const float tol) const;35 /// fuzzy compare, returns -1, 0, +136 int Compare(const Vec2& v, float tol) const;3738 float X, Y;39};4041inline Vec2::Vec2() : X(0.0f), Y(0.0f)42{43}4445inline Vec2::Vec2(const float _x, const float _y) : X(_x), Y(_y)46{47}4849inline Vec2::Vec2(const Vec2& vec) : X(vec.X), Y(vec.Y)50{51}5253inline Vec2::Vec2(const float* p) : X(p[0]), Y(p[1])54{55}5657inline void Vec2::Set(const float _x, const float _y)58{59 X = _x;60 Y = _y;61}6263inline void Vec2::Set(const Vec2& v)64{65 X = v.X;66 Y = v.Y;67}6869inline void Vec2::Set(const float* p)70{71 X = p[0];72 Y = p[1];73}7475inline float Vec2::Len() const76{77 return (float) sqrt(X * X + Y * Y);78}7980inline void Vec2::Norm()81{82 float l = Len();83 if (l > TINY)84 {85 X /= l;86 Y /= l;87 }88}8990inline void Vec2::operator +=(const Vec2& v0)91{92 X += v0.X;93 Y += v0.Y;94}9596inline void Vec2::operator -=(const Vec2& v0)97{98 X -= v0.X;99 Y -= v0.Y;100}101102inline void Vec2::operator *=(const float s)103{104 X *= s;105 Y *= s;106}107108inline void Vec2::operator /=(const float s)109{110 X /= s;111 Y /= s;112}113114inline bool Vec2::IsEqual(const Vec2& v, const float tol) const115{116 if (fabs(v.X - X) > tol) return false;117 else if (fabs(v.Y - Y) > tol) return false;118 return true;119}120121inline int Vec2::Compare(const Vec2& v, float tol) const122{123 if (fabs(v.X - X) > tol) return (v.X > X) ? +1 : -1;124 else if (fabs(v.Y - Y) > tol) return (v.Y > Y) ? +1 : -1;125 else return 0;126}127128static inline129Vec2 operator +(const Vec2& v0, const Vec2& v1)130{131 return Vec2(v0.X + v1.X, v0.Y + v1.Y);132}133134static inline135Vec2 operator -(const Vec2& v0, const Vec2& v1)136{137 return Vec2(v0.X - v1.X, v0.Y - v1.Y);138}139140static inline Vec2 operator *(const Vec2& v0, const float s)141{142 return Vec2(v0.X * s, v0.Y * s);143}144145static inline Vec2 operator -(const Vec2& v)146{147 return Vec2(-v.X, -v.Y);148}149150//Dot product.151static inline float operator %(const Vec2& v0, const Vec2& v1)152{153 return v0.X * v1.X + v0.Y * v1.Y;154}155156}157}158#endif /* WASMLIBS_CPP_VEC2_H_ */159
Wrapped for easier reading. Turn wrap off to inspect exact line lengths.