-
Notifications
You must be signed in to change notification settings - Fork 0
/
vec.h
118 lines (101 loc) · 1.98 KB
/
vec.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
#pragma once
#include <cstdio>
#include <cmath>
class Vec {
private:
float x;
float y;
float z;
public:
Vec():
x(0.0f), y(0.0f), z(0.0f)
{}
Vec(const float _x, const float _y, const float _z):
x(_x), y(_y), z(_z)
{}
Vec(const Vec& v):
x(v.x), y(v.y), z(v.z)
{}
void print() const
{
std::printf("[%f, %f, %f]\n", x, y, z);
}
void set(const float _x, const float _y, const float _z)
{
this->x = _x;
this->y = _y;
this->z = _z;
}
void set(const Vec& vec)
{
this->x = vec.x;
this->y = vec.y;
this->z = vec.z;
}
Vec operator+(const Vec& vec) const
{
Vec v(
this->x + vec.x,
this->y + vec.y,
this->z + vec.z);
return v;
}
Vec operator-(const Vec& vec) const
{
Vec v(
this->x - vec.x,
this->y - vec.y,
this->z - vec.z);
return v;
}
Vec operator-() const
{
Vec v(
- this->x,
- this->y,
- this->z);
return v;
}
template<class T>
Vec operator*(const T n) const
{
Vec v(
this->x * n,
this->y * n,
this->z * n);
return v;
}
template<class T>
Vec operator/(const T n) const
{
Vec v(
this->x / n,
this->y / n,
this->z / n);
return v;
}
float dot(const Vec& vec) const
{
float ret =
this->x * vec.x +
this->y * vec.y +
this->z * vec.z;
return ret;
}
float mag() const
{
return std::sqrtf(this->magSg());
}
float magSg() const
{
float ret =
this->x * this->x +
this->y * this->y +
this->z * this->z;
return ret;
}
Vec normalize() const
{
return (*this) * (1 / this->mag());
}
};