-
Notifications
You must be signed in to change notification settings - Fork 4
/
Vector3.h
115 lines (98 loc) · 1.59 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
#ifndef INCLUDED_VECTOR3_H
#define INCLUDED_VECTOR3_H
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <rpc/xdr.h>
#include <argp.h>
#include <vector>
#include <math.h>
#include <string.h>
//#include <tr1/unordered_map>
#include <unordered_map>
#include <string>
#include <sstream>
/** Reinventing the wheel... */
class Vector3
{
public:
Vector3()
{
x = 0;
y = 0;
z = 0;
}
Vector3(double x, double y, double z)
{
this->x = x;
this->y = y;
this->z = z;
}
void set(double x, double y, double z)
{
this->x = x;
this->y = y;
this->z = z;
}
void scale(double s)
{
this->x *= s;
this->y *= s;
this->z *= s;
}
double dot(Vector3 *v)
{
return this->x*v->x + this->y*v->y + this->z*v->z;
}
double length()
{
return sqrt(x*x + y*y + z*z);
}
void normalise()
{
double l = length();
if(l < tol) {
x = 0;
y = 0;
z = 0;
return;
}
x /= l;
y /= l;
z /= l;
}
double abs_diff(Vector3 *v)
{
double dx = x - v->x;
double dy = y - v->y;
double dz = z - v->z;
return sqrt(dx * dx + dy * dy + dz * dz);
}
void add(Vector3 *v, double scale)
{
this->x += v->x * scale;
this->y += v->y * scale;
this->z += v->z * scale;
}
double get_x()
{
return this->x;
}
double get_y()
{
return this->y;
}
double get_z()
{
return this->z;
}
void print(FILE *outfile)
{
fprintf(outfile, "(%f %f %f)\n", x, y, z);
}
private:
//static const double tol = 1e-10;
static constexpr double tol = 1e-10; //JM for C++ 11
double x, y, z;
};
#endif