WOWCube Docs logo
WOWCube Docs
Mission Control
Section Shortcuts
APIExamplesSourceWOWConnectChangelog
Filters
SDK and language defaults persist in cookies.
SDK version
Navigation Tree
Collapsed by default, focused on the active path.
Made byMcKay Seamons
GitHub
  1. Home
  2. Docs
  3. Source
  4. Vec2.h
Mission NodeSDK 6.2C++math

Vec2.h

SDK Source File: Vec2.h

Source / SDK 6.2 / C++ / math

Vec2.h

Vec2.h
CPP
1/* Copyright Statement:
2 *
3 * (C) 2021-2024 Cubios Inc. All rights reserved.
4 */
5
6#ifndef WASMLIBS_CPP_VEC2_H_
7#define WASMLIBS_CPP_VEC2_H_
8
9#include "Math.h"
10
11namespace Cubios
12{
13namespace Math
14{
15class Vec2
16{
17public:
18 /// constructors
19 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();
28
29 void operator+=(const Vec2& v0);
30 void operator-=(const Vec2& v0);
31 void operator*=(const float s);
32 void operator/=(const float s);
33
34 bool IsEqual(const Vec2& v, const float tol) const;
35 /// fuzzy compare, returns -1, 0, +1
36 int Compare(const Vec2& v, float tol) const;
37
38 float X, Y;
39};
40
41inline Vec2::Vec2() : X(0.0f), Y(0.0f)
42{
43}
44
45inline Vec2::Vec2(const float _x, const float _y) : X(_x), Y(_y)
46{
47}
48
49inline Vec2::Vec2(const Vec2& vec) : X(vec.X), Y(vec.Y)
50{
51}
52
53inline Vec2::Vec2(const float* p) : X(p[0]), Y(p[1])
54{
55}
56
57inline void Vec2::Set(const float _x, const float _y)
58{
59 X = _x;
60 Y = _y;
61}
62
63inline void Vec2::Set(const Vec2& v)
64{
65 X = v.X;
66 Y = v.Y;
67}
68
69inline void Vec2::Set(const float* p)
70{
71 X = p[0];
72 Y = p[1];
73}
74
75inline float Vec2::Len() const
76{
77 return (float) sqrt(X * X + Y * Y);
78}
79
80inline void Vec2::Norm()
81{
82 float l = Len();
83 if (l > TINY)
84 {
85 X /= l;
86 Y /= l;
87 }
88}
89
90inline void Vec2::operator +=(const Vec2& v0)
91{
92 X += v0.X;
93 Y += v0.Y;
94}
95
96inline void Vec2::operator -=(const Vec2& v0)
97{
98 X -= v0.X;
99 Y -= v0.Y;
100}
101
102inline void Vec2::operator *=(const float s)
103{
104 X *= s;
105 Y *= s;
106}
107
108inline void Vec2::operator /=(const float s)
109{
110 X /= s;
111 Y /= s;
112}
113
114inline bool Vec2::IsEqual(const Vec2& v, const float tol) const
115{
116 if (fabs(v.X - X) > tol) return false;
117 else if (fabs(v.Y - Y) > tol) return false;
118 return true;
119}
120
121inline int Vec2::Compare(const Vec2& v, float tol) const
122{
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}
127
128static inline
129Vec2 operator +(const Vec2& v0, const Vec2& v1)
130{
131 return Vec2(v0.X + v1.X, v0.Y + v1.Y);
132}
133
134static inline
135Vec2 operator -(const Vec2& v0, const Vec2& v1)
136{
137 return Vec2(v0.X - v1.X, v0.Y - v1.Y);
138}
139
140static inline Vec2 operator *(const Vec2& v0, const float s)
141{
142 return Vec2(v0.X * s, v0.Y * s);
143}
144
145static inline Vec2 operator -(const Vec2& v)
146{
147 return Vec2(-v.X, -v.Y);
148}
149
150//Dot product.
151static inline float operator %(const Vec2& v0, const Vec2& v1)
152{
153 return v0.X * v1.X + v0.Y * v1.Y;
154}
155
156//----------------------------------------------------------------
157class Vec2i
158{
159public:
160 /// constructors
161 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();
170
171 void operator+=(const Vec2i& v0);
172 void operator-=(const Vec2i& v0);
173 void operator*=(const float s);
174 void operator/=(const float s);
175
176 bool IsEqual(const Vec2i& v, const float tol) const;
177 /// fuzzy compare, returns -1, 0, +1
178 int Compare(const Vec2i& v, float tol) const;
179
180 float X, Y;
181};
182
183inline Vec2i::Vec2i() : X(0), Y(0)
184{
185}
186
187inline Vec2i::Vec2i(const int16_t _x, const int16_t _y) : X(_x), Y(_y)
188{
189}
190
191inline Vec2i::Vec2i(const Vec2i& vec) : X(vec.X), Y(vec.Y)
192{
193}
194
195inline Vec2i::Vec2i(const int16_t* p) : X(p[0]), Y(p[1])
196{
197}
198
199inline void Vec2i::Set(const int16_t _x, const int16_t _y)
200{
201 X = _x;
202 Y = _y;
203}
204
205inline void Vec2i::Set(const Vec2i& v)
206{
207 X = v.X;
208 Y = v.Y;
209}
210
211inline void Vec2i::Set(const int16_t* p)
212{
213 X = p[0];
214 Y = p[1];
215}
216
217inline float Vec2i::Len() const
218{
219 return (float) sqrt(X * X + Y * Y);
220}
221
222inline void Vec2i::Norm()
223{
224 float l = Len();
225 if (l > TINY)
226 {
227 X /= l;
228 Y /= l;
229 }
230}
231
232inline void Vec2i::operator +=(const Vec2i& v0)
233{
234 X += v0.X;
235 Y += v0.Y;
236}
237
238inline void Vec2i::operator -=(const Vec2i& v0)
239{
240 X -= v0.X;
241 Y -= v0.Y;
242}
243
244inline void Vec2i::operator *=(const float s)
245{
246 X *= s;
247 Y *= s;
248}
249
250inline void Vec2i::operator /=(const float s)
251{
252 X /= s;
253 Y /= s;
254}
255
256inline bool Vec2i::IsEqual(const Vec2i& v, const float tol) const
257{
258 if (fabs(v.X - X) > tol) return false;
259 else if (fabs(v.Y - Y) > tol) return false;
260 return true;
261}
262
263inline int Vec2i::Compare(const Vec2i& v, float tol) const
264{
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}
269
270static inline
271Vec2i operator +(const Vec2i& v0, const Vec2i& v1)
272{
273 return Vec2i(v0.X + v1.X, v0.Y + v1.Y);
274}
275
276static inline
277Vec2i operator -(const Vec2i& v0, const Vec2i& v1)
278{
279 return Vec2i(v0.X - v1.X, v0.Y - v1.Y);
280}
281
282static inline Vec2i operator *(const Vec2i& v0, const float s)
283{
284 return Vec2i(v0.X * s, v0.Y * s);
285}
286
287static inline Vec2i operator -(const Vec2i& v)
288{
289 return Vec2i(-v.X, -v.Y);
290}
291
292//Dot product.
293static inline float operator %(const Vec2i& v0, const Vec2i& v1)
294{
295 return v0.X * v1.X + v0.Y * v1.Y;
296}
297
298}
299}
300#endif /* WASMLIBS_CPP_VEC2_H_ */
301
Wrapped for easier reading. Turn wrap off to inspect exact line lengths.
Context Rail

Related nodes

Color.h
Source / SDK 6.2 / C++ / math
Math.h
Source / SDK 6.2 / C++ / math
Rect2.h
Source / SDK 6.2 / C++ / math
Transform.h
Source / SDK 6.2 / C++ / math
Previous Node
Transform.h
Source / SDK 6.2 / C++ / math
Next Node
native access.h
Source / SDK 6.2 / C++ / Core