-
Notifications
You must be signed in to change notification settings - Fork 0
/
vector.cpp
64 lines (50 loc) · 1.45 KB
/
vector.cpp
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
#include "vector.h"
#include "math.h"
namespace Math {
Vector2D operator*(float a, const Vector2D& vec) {
return Vector2D(a * vec.x, a * vec.y);
}
Vector2D operator+(const Vector2D& u, const Vector2D& v) {
return Vector2D(u.x + v.x, u.y + v.y);
}
Vector2D operator+(float a, const Vector2D& v) {
return Vector2D(a + v.x, a + v.y);
}
Vector2D operator-(const Vector2D& u, const Vector2D& v) {
return Vector2D(u.x - v.x, u.y - v.y);
}
Vector3D operator*(float a, const Vector3D& vec) {
return Vector3D(a * vec.x, a * vec.y, a * vec.z);
}
float operator*(const Vector3D& u, const Vector3D& v) {
return u.x * v.x + u.y * v.y + u.z * v.z;
}
Vector2D operator/(const Vector2D& v, float a) {
return Vector2D(v.x / a, v.y / a);
}
float length(const Vector3D& v) {
return sqrt(v * v);
}
Vector3D normalize(const Vector3D& v) {
return v / length(v);
}
Vector3D operator^(const Vector3D& u, const Vector3D& v) {
return Vector3D(
u.y * v.z - u.z * v.y,
u.z * v.x - u.x * v.z,
u.x * v.y - u.y * v.x
);
}
Vector3D operator+(const Vector3D& u, const Vector3D& v) {
return Vector3D(u.x + v.x, u.y + v.y, u.z + v.z);
}
Vector3D operator+(float a, const Vector3D& v) {
return Vector3D(a + v.x, a + v.y, a + v.z);
}
Vector3D operator-(const Vector3D& u, const Vector3D& v) {
return Vector3D(u.x - v.x, u.y - v.y, u.z - v.z);
}
Vector3D operator/(const Vector3D& v, float a) {
return Vector3D(v.x / a, v.y / a, v.z / a);
}
}