-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvector3.h
123 lines (106 loc) · 1.61 KB
/
vector3.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#pragma once
#include <math.h>
#include "util_move.h"
namespace util
{
template <typename D>
class vector2
{
D x_;
D y_;
public:
vector2(D x, D y):
x_(util::move(x)),
y_(util::move(y))
{}
vector2():
x_(0),
y_(0)
{}
D x() const
{
return x_;
}
D y() const
{
return y_;
}
/**
* Setter para x.
*/
void x(D x)
{
x_ = util::move(x);
}
/**
* Setter para y.
*/
void y(D y)
{
y_ = util::move(y);
}
/**
* Devuelve la longitud del vector.
*/
D distance() const
{
return sqrt(x_*x_ + y_*y_);
}
/**
* Devuelve la longitud al cuadrado del vector
*/
D distance_sq() const
{
return x_*x_ + y_*y_;
}
};
typedef vector2<float> vec2;
template <typename D>
vector2<D>& operator+=(vector2<D>& lhs, const vector2<D>& rhs)
{
lhs.x(lhs.x() + rhs.x());
lhs.y(lhs.y() + rhs.y());
return lhs;
}
template <typename D>
vector2<D> operator+(vector2<D> lhs, const vector2<D> rhs)
{
return lhs += rhs;
}
template <typename D>
vector2<D>& operator-=(vector2<D>& lhs, const vector2<D>& rhs)
{
lhs.x(lhs.x() - rhs.x());
lhs.y(lhs.y() - rhs.y());
return lhs;
}
template <typename D>
vector2<D> operator-(vector2<D> lhs, const vector2<D> rhs)
{
return lhs -= rhs;
}
template <typename D>
vector2<D>& operator*=(vector2<D>& lhs, D n)
{
lhs.x(lhs.x() * n);
lhs.y(lhs.y() * n);
return lhs;
}
template <typename D>
vector2<D> operator*(vector2<D> lhs, D n)
{
return lhs *= n;
}
template <typename D>
vector2<D>& operator/=(vector2<D>& lhs, D n)
{
lhs.x(lhs.x() / n);
lhs.y(lhs.y() / n);
return lhs;
}
template <typename D>
vector2<D> operator/(vector2<D> lhs, D n)
{
return lhs /= n;
}
}