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//----------------------------------------------------------------157class Vec2i158{159public:160 /// constructors161 Vec2i();162 Vec2i(const int16_t _x, const int16_t _y);163 Vec2i(const Vec2i& vec);164 Vec2i(const int16_t* p);165 void Set(const int16_t _x, const int16_t _y);166 void Set(const Vec2i& vec);167 void Set(const int16_t* p);168 float Len() const;169 void Norm();170171 void operator+=(const Vec2i& v0);172 void operator-=(const Vec2i& v0);173 void operator*=(const float s);174 void operator/=(const float s);175176 bool IsEqual(const Vec2i& v, const float tol) const;177 /// fuzzy compare, returns -1, 0, +1178 int Compare(const Vec2i& v, float tol) const;179180 float X, Y;181};182183inline Vec2i::Vec2i() : X(0), Y(0)184{185}186187inline Vec2i::Vec2i(const int16_t _x, const int16_t _y) : X(_x), Y(_y)188{189}190191inline Vec2i::Vec2i(const Vec2i& vec) : X(vec.X), Y(vec.Y)192{193}194195inline Vec2i::Vec2i(const int16_t* p) : X(p[0]), Y(p[1])196{197}198199inline void Vec2i::Set(const int16_t _x, const int16_t _y)200{201 X = _x;202 Y = _y;203}204205inline void Vec2i::Set(const Vec2i& v)206{207 X = v.X;208 Y = v.Y;209}210211inline void Vec2i::Set(const int16_t* p)212{213 X = p[0];214 Y = p[1];215}216217inline float Vec2i::Len() const218{219 return (float) sqrt(X * X + Y * Y);220}221222inline void Vec2i::Norm()223{224 float l = Len();225 if (l > TINY)226 {227 X /= l;228 Y /= l;229 }230}231232inline void Vec2i::operator +=(const Vec2i& v0)233{234 X += v0.X;235 Y += v0.Y;236}237238inline void Vec2i::operator -=(const Vec2i& v0)239{240 X -= v0.X;241 Y -= v0.Y;242}243244inline void Vec2i::operator *=(const float s)245{246 X *= s;247 Y *= s;248}249250inline void Vec2i::operator /=(const float s)251{252 X /= s;253 Y /= s;254}255256inline bool Vec2i::IsEqual(const Vec2i& v, const float tol) const257{258 if (fabs(v.X - X) > tol) return false;259 else if (fabs(v.Y - Y) > tol) return false;260 return true;261}262263inline int Vec2i::Compare(const Vec2i& v, float tol) const264{265 if (fabs(v.X - X) > tol) return (v.X > X) ? +1 : -1;266 else if (fabs(v.Y - Y) > tol) return (v.Y > Y) ? +1 : -1;267 else return 0;268}269270static inline271Vec2i operator +(const Vec2i& v0, const Vec2i& v1)272{273 return Vec2i(v0.X + v1.X, v0.Y + v1.Y);274}275276static inline277Vec2i operator -(const Vec2i& v0, const Vec2i& v1)278{279 return Vec2i(v0.X - v1.X, v0.Y - v1.Y);280}281282static inline Vec2i operator *(const Vec2i& v0, const float s)283{284 return Vec2i(v0.X * s, v0.Y * s);285}286287static inline Vec2i operator -(const Vec2i& v)288{289 return Vec2i(-v.X, -v.Y);290}291292//Dot product.293static inline float operator %(const Vec2i& v0, const Vec2i& v1)294{295 return v0.X * v1.X + v0.Y * v1.Y;296}297298}299}300#endif /* WASMLIBS_CPP_VEC2_H_ */301
Wrapped for easier reading. Turn wrap off to inspect exact line lengths.