gKit3
Loading...
Searching...
No Matches
vec.h
Go to the documentation of this file.
1
2#ifndef _VEC_H
3#define _VEC_H
4
5
8
11
13struct vec2;
14struct vec3;
15struct vec4;
16struct Vector;
17struct Point;
18
20struct Point
21{
23 Point( ) : x(0), y(0), z(0) {}
24 Point( const float _x, const float _y, const float _z ) : x(_x), y(_y), z(_z) {}
25
27 explicit Point( const vec3& v ); // l'implementation se trouve en fin de fichier, la structure vec3 n'est pas encore connue.
28 explicit Point( const vec4& v ); // l'implementation se trouve en fin de fichier, la structure vec3 n'est pas encore connue.
30 explicit Point( const Vector& v ); // l'implementation se trouve en fin de fichier, la structure vector n'est pas encore connue.
31
33 float operator() ( const unsigned int i ) const; // l'implementation se trouve en fin de fichier
34 float& operator() ( const unsigned int i ); // l'implementation se trouve en fin de fichier
35
36 float x, y, z;
37};
38
40Point Origin( );
41
43float distance( const Point& a, const Point& b );
45float distance2( const Point& a, const Point& b );
46
48Point center( const Point& a, const Point& b );
49
51Point min( const Point& a, const Point& b );
53Point max( const Point& a, const Point& b );
54
55
57struct Vector
58{
60 Vector( ) : x(0), y(0), z(0) {}
61 Vector( const float _x, const float _y, const float _z ) : x(_x), y(_y), z(_z) {}
63 explicit Vector( const Point& a, const Point& b ) : x(b.x - a.x), y(b.y - a.y), z(b.z - a.z) {}
64
66 explicit Vector( const vec3& v ); // l'implementation se trouve en fin de fichier, la structure vec3 n'est pas encore connue.
67 explicit Vector( const vec4& v ); // l'implementation se trouve en fin de fichier, la structure vec3 n'est pas encore connue.
69 explicit Vector( const Point& a ); // l'implementation se trouve en fin de fichier.
70
72 float operator() ( const unsigned int i ) const; // l'implementation se trouve en fin de fichier
73 float& operator() ( const unsigned int i ); // l'implementation se trouve en fin de fichier
74
75 float x, y, z;
76};
77
79Vector normalize( const Vector& v );
81Vector cross( const Vector& u, const Vector& v );
83float dot( const Vector& u, const Vector& v );
85float length( const Vector& v );
87float length2( const Vector& v );
88
90Vector operator- ( const Point& a, const Point& b );
91
93Point operator+ ( const Point& a, const Point& b );
94
96Point operator* ( const float k, const Point& a );
98Point operator* ( const Point& a, const float k );
100Point operator/ ( const Point& a, const float k );
101
103Vector operator- ( const Vector& v );
104
106Point operator+ ( const Point& a, const Vector& v );
108Point operator+ ( const Vector& v, const Point& a );
110Point operator- ( const Vector& v, const Point& a );
112Point operator- ( const Point& a, const Vector& v );
114Vector operator+ ( const Vector& u, const Vector& v );
116Vector operator- ( const Vector& u, const Vector& v );
118Vector operator+ ( const float k, const Vector& v );
119Vector operator+ ( const Vector& v, const float k );
120
122Vector operator* ( const float k, const Vector& v );
124Vector operator* ( const Vector& v, const float k );
125
127Vector operator* ( const Vector& a, const Vector& b );
129Vector operator/ ( const Vector& v, const float k );
130
131
133struct vec2
134{
136 vec2( ) : x(0), y(0) {}
137 vec2( const float _x, const float _y ) : x(_x), y(_y) {}
138
140 float operator() ( const unsigned int i ) const { return (&x)[i]; }
141 float& operator() ( const unsigned int i ) { return (&x)[i]; }
142
143 float x, y;
144};
145
146
148struct vec3
149{
151 vec3( ) : x(0), y(0), z(0) {}
152 vec3( const float _x, const float _y, const float _z ) : x(_x), y(_y), z(_z) {}
154 vec3( const vec2& a, const float _z ) : x(a.x), y(a.y), z(_z) {}
155
157 vec3( const Point& a ); // l'implementation se trouve en fin de fichier.
159 vec3( const Vector& v ); // l'implementation se trouve en fin de fichier.
160
162 float operator() ( const unsigned int i ) const { return (&x)[i]; }
163 float& operator() ( const unsigned int i ) { return (&x)[i]; }
164
165 float x, y, z;
166};
167
168
170struct vec4
171{
173 vec4( ) : x(0), y(0), z(0), w(0) {}
174 vec4( const float _x, const float _y, const float _z, const float _w ) : x(_x), y(_y), z(_z), w(_w) {}
176 vec4( const vec2& v, const float _z= 0, const float _w= 0 ) : x(v.x), y(v.y), z(_z), w(_w) {}
178 vec4( const vec3& v, const float _w= 0 ) : x(v.x), y(v.y), z(v.z), w(_w) {}
179
181 vec4( const Point& a ); // l'implementation se trouve en fin de fichier.
183 vec4( const Vector& v ); // l'implementation se trouve en fin de fichier.
184
186 float operator() ( const unsigned int i ) const { return (&x)[i]; }
187 float& operator() ( const unsigned int i ) { return (&x)[i]; }
188
189 float x, y, z, w;
190};
191
192
193// implementation des constructeurs explicites.
194inline Point::Point( const vec3& v ) : x(v.x), y(v.y), z(v.z) {}
195inline Point::Point( const vec4& v ) : x(v.x), y(v.y), z(v.z) {}
196inline Point::Point( const Vector& v ) : x(v.x), y(v.y), z(v.z) {}
197
198inline Vector::Vector( const vec3& v ) : x(v.x), y(v.y), z(v.z) {}
199inline Vector::Vector( const vec4& v ) : x(v.x), y(v.y), z(v.z) {}
200inline Vector::Vector( const Point& a ) : x(a.x), y(a.y), z(a.z) {}
201
202inline vec3::vec3( const Point& a ) : x(a.x), y(a.y), z(a.z) {}
203inline vec3::vec3( const Vector& v ) : x(v.x), y(v.y), z(v.z) {}
204
205inline vec4::vec4( const Point& a ) : x(a.x), y(a.y), z(a.z), w(1.f) {}
206inline vec4::vec4( const Vector& v ) : x(v.x), y(v.y), z(v.z), w(0.f) {}
207
208//
209inline float Point::operator( ) ( const unsigned int i ) const { return (&x)[i]; }
210inline float Vector::operator( ) ( const unsigned int i ) const { return (&x)[i]; }
211
212inline float& Point::operator( ) ( const unsigned int i ) { return (&x)[i]; }
213inline float& Vector::operator( ) ( const unsigned int i ) { return (&x)[i]; }
214
215//
216#include <iostream>
217
218inline std::ostream& operator<<(std::ostream& o, const Point& p)
219{
220 o<<"p("<<p.x<<","<<p.y<<","<<p.z<<")";
221 return o;
222}
223
224inline std::ostream& operator<<(std::ostream& o, const Vector& v)
225{
226 o<<"v("<<v.x<<","<<v.y<<","<<v.z<<")";
227 return o;
228}
229
231#endif
Point center(const Point &a, const Point &b)
renvoie le milieu du segment ab.
Definition vec.cpp:24
Point Origin()
renvoie le point origine (0, 0, 0)
Definition vec.cpp:8
Vector operator-(const Point &a, const Point &b)
renvoie le vecteur a - b.
Definition vec.cpp:41
Point max(const Point &a, const Point &b)
renvoie la plus grande composante de chaque point. x, y, z= max(a.x, b.x), max(a.y,...
Definition vec.cpp:35
Point operator*(const float k, const Point &a)
renvoie le "point" k*a;
Definition vec.cpp:46
float operator()(const unsigned int i) const
renvoie la ieme composante du point.
Definition vec.h:209
Point operator/(const Point &a, const float k)
renvoie le "point" v/k;
Definition vec.cpp:56
float distance(const Point &a, const Point &b)
renvoie la distance etre 2 points.
Definition vec.cpp:14
Point operator+(const Point &a, const Point &b)
renvoie le "point" a + b.
Definition vec.cpp:62
Point min(const Point &a, const Point &b)
renvoie la plus petite composante de chaque point. x, y, z= min(a.x, b.x), min(a.y,...
Definition vec.cpp:30
float length2(const Vector &v)
renvoie la carre de la longueur d'un vecteur.
Definition vec.cpp:157
float operator()(const unsigned int i) const
renvoie la ieme composante du vecteur.
Definition vec.h:210
float dot(const Vector &u, const Vector &v)
renvoie le produit scalaire de 2 vecteurs.
Definition vec.cpp:147
float distance2(const Point &a, const Point &b)
renvoie le carre de la distance etre 2 points.
Definition vec.cpp:19
Vector normalize(const Vector &v)
renvoie un vecteur unitaire / longueur == 1.
Definition vec.cpp:133
float length(const Vector &v)
renvoie la longueur d'un vecteur.
Definition vec.cpp:152
Vector cross(const Vector &u, const Vector &v)
renvoie le produit vectoriel de 2 vecteurs.
Definition vec.cpp:139
representation d'un point 3d.
Definition vec.h:21
Point()
constructeur par defaut.
Definition vec.h:23
representation d'un vecteur 3d.
Definition vec.h:58
Vector(const Point &a, const Point &b)
cree le vecteur ab.
Definition vec.h:63
Vector()
constructeur par defaut.
Definition vec.h:60
vecteur generique, utilitaire.
Definition vec.h:134
float operator()(const unsigned int i) const
renvoie la ieme composante du vecteur.
Definition vec.h:140
vec2()
constructeur par defaut.
Definition vec.h:136
vecteur generique, utilitaire.
Definition vec.h:149
float operator()(const unsigned int i) const
renvoie la ieme composante du vecteur.
Definition vec.h:162
vec3(const vec2 &a, const float _z)
constructeur par defaut.
Definition vec.h:154
vec3()
constructeur par defaut.
Definition vec.h:151
vecteur generique 4d, ou 3d homogene, utilitaire.
Definition vec.h:171
vec4(const vec3 &v, const float _w=0)
constructeur par defaut.
Definition vec.h:178
vec4()
constructeur par defaut.
Definition vec.h:173
float operator()(const unsigned int i) const
renvoie la ieme composante du vecteur.
Definition vec.h:186
vec4(const vec2 &v, const float _z=0, const float _w=0)
constructeur par defaut.
Definition vec.h:176