-
Notifications
You must be signed in to change notification settings - Fork 0
/
Vector3D.h~
148 lines (116 loc) · 3.06 KB
/
Vector3D.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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#ifndef CLASS_VECTOR_3D
#define CLASS_VECTOR_3D
#include <iostream>
#include <math.h>
#include <GL/gl.h>
#include "Utils.h"
template<class T>
class Vector3D
{
public:
Vector3D(T _x = (T)0, T _y = (T)0, T _z = (T)0) : x(_x), y(_y), z(_z)
{
}
template<class Y>
Vector3D(Vector3D<Y> &to_copy) : x(to_copy.x), y(to_copy.y), z(to_copy.z)
{
}
~Vector3D()
{
}
Vector3D VectorialProd(Vector3D vector)
{
return Vector3D(y * vector.z - z * vector.y, z * vector.x - x * vector.z, x * vector.y - y * vector.x);
}
float ScalarProd(Vector3D vector)
{
return Vector3D(x * vector.x + y * vector.y + z * vector.z);
}
float Distance(Vector3D B)
{
return sqrt( (x - B.x) * (x - B.x)+(y - B.y) * (y - B.y)+(z - B.z) * (z - B.z) );
}
Vector3D InSameLine(Vector3D C, float distance) // Cette fonction recherche un vecteur B appartennant à la droite AC (A est ce Vector3D et C est l'autre vecteur déterminant la droite avec A)
// La distance est celle entre A et le point recherché (la distance est par rapport a AC)
{
Vector3D B; // Le vecteur qu'on recherche est B qui appartient à la droite AC
float AC = Distance(C);
if(AC == 0) // Si la distance est 0 donc les deux vecteurs sont les mêmes...
return C; // ...et par conséquent on renvoie l'un deux
B.x = (float)x + ( ((float)C.x - (float)x) / AC) * (distance*AC);
B.y = (float)y + ( ((float)C.y - (float)y) / AC) * (distance*AC);
B.z = (float)z + ( ((float)C.z - (float)z) / AC) * (distance*AC);
//std::cout << "FOEL : " << AC << std::endl;
return B;
}
void Normalize()
{
float longueur_vector = sqrt( x*x + y*y + z*z );
x /= longueur_vector;
y /= longueur_vector;
z /= longueur_vector;
}
void draw(SDL::RGB color)
{
glLineWidth(10);
glDisable(GL_TEXTURE_2D);
glBegin(GL_LINES);
glColor3ub(color.r, color.g, color.b);
glVertex3f(0, 0, 0);
glVertex3f(x, y, z);
glVertex3f(x, y, z);
glVertex3f(x-1, y, z+1);
glVertex3f(x, y, z);
glVertex3f(x-1, y, z-1);
glEnd();
glEnable(GL_TEXTURE_2D);
}
void operator=(Vector3D to_copy)
{
x = to_copy.x;
y = to_copy.y;
z = to_copy.z;
}
Vector3D operator+(Vector3D vector)
{
Vector3D resultat(x+vector.x, y+vector.y, z+vector.z);
}
Vector3D operator-(Vector3D vector)
{
Vector3D resultat(x-vector.x, y-vector.y, z-vector.z);
}
void operator-=(Vector3D vector)
{
x -= vector.x;
y -= vector.y;
z -= vector.z;
}
void operator+=(Vector3D vector)
{
x += vector.x;
y += vector.y;
z += vector.z;
}
Vector3D operator/(T nbr)
{
return Vector3D(x/nbr, y/nbr, z/nbr);
}
Vector3D operator*(T nbr)
{
return Vector3D(x*nbr, y*nbr, z*nbr);
}
void operator/=(T nbr)
{
x /= nbr;
y /= nbr;
z /= nbr;
}
void operator*=(T nbr)
{
x *= nbr;
y *= nbr;
z *= nbr;
}
T x, y, z;
};
#endif