Scanframe Modular Application 0.1.0
Loading...
Searching...
No Matches
TVector2D.h
Go to the documentation of this file.
1// ReSharper disable file CppNonExplicitConversionOperator
2#pragma once
3
4#include <limits>
5#include <string>
6
7namespace sf
8{
9
10// Forward declaration.
11template<typename T>
12class TMatrix22;
13
14// Forward declaration.
15template<typename T>
16class TRectangle2D;
17
21template<typename T>
23{
24 public:
28 typedef T value_type;
29
33 TVector2D() = default;
34
39
43 TVector2D(TVector2D&&) noexcept;
44
50 TVector2D(T xp, T yp);
51
58 TVector2D& assign(T xp, T yp);
59
66
70 TVector2D& operator=(const TVector2D& v) noexcept;
71
75 TVector2D& operator=(TVector2D&& v) noexcept;
76
80 TVector2D& operator*=(const TMatrix22<T>& mtx);
81
85 TVector2D operator-() const;
86
90 TVector2D& operator+=(const TVector2D&);
91
95 TVector2D& operator-=(const TVector2D&);
96
100 TVector2D& operator*=(T c);
101
105 TVector2D& operator/=(T);
106
110 TVector2D operator+(const TVector2D&) const;
111
115 TVector2D operator-(const TVector2D&) const;
116
120 TVector2D operator/(T) const;
121
128 bool isEqual(const TVector2D& v, T tol = tolerance) const;
129
133 bool operator==(const TVector2D&) const;
134
138 bool operator!=(const TVector2D&) const;
139
144 T& operator[](size_t);
145
150 const T& operator[](size_t) const;
151
155 constexpr T* data();
156
160 constexpr const T* data() const;
161
165 constexpr operator T*();
166
170 constexpr operator const T*() const;
171
175 constexpr T x() const;
176
180 constexpr T& x();
181
185 constexpr T y() const;
186
190 constexpr T& y();
191
198 T length() const;
199
204 T lengthSqr() const;
205
211
217
222 TVector2D& scale(T factor);
223
228 TVector2D scaled(T factor) const;
229
234 T crossProduct(const TVector2D&) const;
235
240 T dotProduct(const TVector2D&) const;
241
246 T operator*(const TVector2D& v) const;
247
252 T angle(const TVector2D&) const;
253
258 T angle() const;
259
265
271 T slope() const;
272
278 T distance(const TVector2D&) const;
279
286 T distanceSqr(const TVector2D&) const;
287
292 void updateMin(const TVector2D& vertex);
293
298 void updateMax(const TVector2D& vertex);
299
303 std::string toString() const;
304
313 TVector2D& fromString(const std::string& s, bool ignore_err = false) noexcept(false);
314
320 static constexpr auto tolerance = std::numeric_limits<T>::epsilon() * 10.0;
321
330 static int areOnSameSide(const TVector2D& lp1, const TVector2D& lp2, const TVector2D& p1, const TVector2D& p2);
331
332 protected:
337 {
338 T array[2];
339
341 {
342 T x;
343 T y;
344 } coord;
345 } _data{0, 0};
346
347 friend class TRectangle2D<T>;
348};
349
350template<typename T>
352{
353 return {v.x() * c, v.y() * c};
354}
355
356template<typename T>
358{
359 return {v.x() * c, v.y() * c};
360}
361
365template<typename T>
366std::istream& operator>>(std::istream& is, TVector2D<T>& v) noexcept(false)
367{
368 std::string s;
369 constexpr auto delimiter = ')';
370 std::getline(is, s, delimiter);
371 v.fromString(s.append(1, delimiter));
372 return is;
373}
374
378template<typename T>
379std::ostream& operator<<(std::ostream& os, const TVector2D<T>& v)
380{
381 return os << v.toString();
382}
383
384}// namespace sf
385
386// Include all inlined functions and template implementations.
387#include <math/TVector2D.hpp>
Generic 2 x 2 matrix template.
Definition TMatrix22.h:16
2-dimensional vector for math operations.
Definition TVector2D.h:23
T lengthSqr() const
Gets the squared length or magnitude of the vector.
TVector2D(const TVector2D &v)
Copy constructor.
T distanceSqr(const TVector2D &) const
Gets the squared distance between 2 given points. Avoids taking an expensive sqrt call....
static constexpr auto tolerance
Tolerance for when comparing in the equal operator. Empirical chosen epsilon multiplier to make it wo...
Definition TVector2D.h:320
T dotProduct(const TVector2D &) const
Gets the dot (in) product of 2 vectors.
TVector2D(TVector2D &&) noexcept
Move constructor.
TVector2D scaled(T factor) const
Scales the vector by multiplying all axis with the passed factor.
static int areOnSameSide(const TVector2D &lp1, const TVector2D &lp2, const TVector2D &p1, const TVector2D &p2)
Checks where 2 points lie in relation to a given line given by 2 points.
std::string toString() const
Gets the string representation of the 2D vector formed like '(1.23,4.56)'.
TVector2D & scale(T factor)
Scales the vector by multiplying all axis with the passed factor.
constexpr T * data()
Gets a const pointer to the data.
TVector2D normalized() const
Gets a normalized vector also called a unit-vector, made of length 1.
T angleNormalized() const
Returns a normalized positive angle of function angle().
TVector2D & assign(T xp, T yp)
Assignment of new coordinate values.
T angle(const TVector2D &) const
Gets the angle between the two vectors.
union sf::TVector2D::data_type _data
TVector2D()=default
Default constructor.
TVector2D & fromString(const std::string &s, bool ignore_err=false) noexcept(false)
Gets the vector value from the string representation formed like '(1.23,4.56)'. Throws an exception w...
T slope() const
Gets the slope (coefficient) of the line formed with the origin (0, 0). When it is an infinite value ...
T crossProduct(const TVector2D &) const
Gets the cross (out) product of 2 vectors.
void updateMax(const TVector2D &vertex)
Copy only those values of x or y which are larger.
T length() const
Gets the length or magnitude of the vector.
TVector2D & normalize()
Normalizes the vector also called a unit-vector, set to length 1.
constexpr T x() const
Gets the x-coordinate value.
constexpr T y() const
Gets the y-coordinate value.
T distance(const TVector2D &) const
Gets the distance between this and the passed vector. Note that this has to return a double because i...
T value_type
Type declaration of the coordinate storage values.
Definition TVector2D.h:28
bool isEqual(const TVector2D &v, T tol=tolerance) const
Compares the passed vector within the set tolerance.
void updateMin(const TVector2D &vertex)
Copy only those values of x or y which are smaller.
Definition Application.h:10
_GII_FUNC std::istream & operator>>(std::istream &is, ResultData &)
Stream operator for setting up this instance with a setup std::string.
TMatrix44< T > operator*(const TMatrix44< T > &lm, const TMatrix44< T > &rm)
Multiplies to matrices into a single one.
_GII_FUNC std::ostream & operator<<(std::ostream &os, const ResultData &)
Stream operator for the setup std::string.
Definition TVector2D.h:341
T y
Definition TVector2D.h:343
T x
Definition TVector2D.h:342
Storage union of the 2D coordinate making the x,y accessible as an array.
Definition TVector2D.h:337