11
TVec2(const TVec2<T>& v) = default;
12
constexpr TVec2(T x_, T y_) noexcept:
17
void operator=(const TVec2<T>& v)
23
bool operator==(const TVec2<T>& v)
25
return x == v.x && y == v.y;
28
bool operator!=(const TVec2<T>& v)
30
return !operator==(v);
33
TVec2<T> floor() const;
35
// squared euclidean length
53
typedef TVec2<double> Vec2;
54
typedef TVec2<int> Vec2Int;
58
TVec2<T> operator+ (const TVec2<T>& v, const TVec2<T>& v2)
59
{ return TVec2<T>(v.w + v2.w, v.h + v2.h); }
61
TVec2<T> operator+ (const TVec2<T>& v, const T& k)
62
{ return TVec2<T>(k + v.w, k + v.h); }
65
void operator+= (TVec2<T>& v, const T& k)
66
{ v.x += k; v.y += k; }
68
void operator+= (TVec2<T>& v, const TVec2<T>& v2)
69
{ v.x += v2.x; v.y += v2.y; }
72
TVec2<T> operator- (const TVec2<T>& sz, const TVec2<T>& sz2)
73
{ return TVec2<T>(sz.w - sz2.w, sz.h - sz2.h); }
75
TVec2<T> operator- (const TVec2<T>& sz, const T& k)
76
{ return TVec2<T>(sz.w - k, sz.h - k); }
78
TVec2<T> operator- (const T& k, const TVec2<T>& sz)
79
{ return TVec2<T>(k - sz.w, k - sz.h); }
82
TVec2<T> operator- (const TVec2<T>& sz) // unary "-"
83
{ return TVec2<T>(-sz.w, -sz.h); }
86
TVec2<T> operator* (const TVec2<T>& sz, const TVec2<T>& sz2)
87
{ return TVec2<T>(sz.w * sz2.w, sz.h * sz2.h); }
89
TVec2<T> operator* (const TVec2<T>& sz, const T& k)
90
{ return TVec2<T>(k * sz.w, k * sz.h); }
93
void operator*= (TVec2<T>& v, const T& k)
94
{ v.x *= k; v.y *= k; }
97
TVec2<T> operator/ (const TVec2<T>& sz, const TVec2<T>& sz2)
98
{ return TVec2<T>(sz.w / sz2.w, sz.h / sz2.h); }
100
TVec2<T> operator/ (const TVec2<T>& sz, const T& k)
101
{ return TVec2<T>(sz.w / k, sz.h / k); }
105
class TPoint : public TVec2<T> {
108
constexpr TPoint(T x_, T y_) noexcept:
111
TPoint(const TVec2<T>& v) :
115
// squared euclidean distance
116
double distance2(const TPoint& pt)
119
return p.x * p.x + p.y * p.y;
122
typedef TPoint<double> Point;
123
typedef TPoint<int> PointInt;
127
class TSize : public TVec2<T> {
130
constexpr TSize(T x_, T y_) noexcept:
133
TSize(const TVec2<T>& v) :
137
typedef TSize<double> Size;
138
typedef TSize<int> SizeInt;
142
class TOffset : public TVec2<T> {
145
constexpr TOffset(T x_, T y_) noexcept:
148
TOffset(const TVec2<T>& v) :
152
typedef TOffset<double> Offset;
153
typedef TOffset<int> OffsetInt;
157
class TScale : public TVec2<T> {
160
constexpr TScale(T x_, T y_) noexcept:
163
TScale(const TVec2<T>& v) :
167
typedef TScale<double> Scale;
168
typedef TScale<int> ScaleInt;
175
constexpr TLine(TPoint<T> begin_, TPoint<T> end_) noexcept:
176
begin(begin_), end(end_)
181
typedef TLine<double> Line;
183
#endif // POINT_DECL_H