gKit2 light
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
26 Point( const vec2& v, const float z );
28 Point( const vec3& v ); // l'implementation se trouve en fin de fichier, la structure vec3 n'est pas encore connue.
29 Point( const vec4& v ); // l'implementation se trouve en fin de fichier, la structure vec3 n'est pas encore connue.
31 Point( const Vector& v ); // l'implementation se trouve en fin de fichier, la structure vector n'est pas encore connue.
32
34 float operator() ( const unsigned int i ) const; // l'implementation se trouve en fin de fichier
35 float& operator() ( const unsigned int i ); // l'implementation se trouve en fin de fichier
36
37 float x, y, z;
38};
39
41Point Origin( );
42
44float distance( const Point& a, const Point& b );
46float distance2( const Point& a, const Point& b );
47
49Point center( const Point& a, const Point& b );
50
52Point min( const Point& a, const Point& b );
54Point max( const Point& a, const Point& b );
55
57Vector min( const Vector& a, const Vector& b );
59Vector max( const Vector& a, const Vector& b );
60
62void minmax( const Vector& a, const Vector& b, Vector& vmin, Vector& vmax );
63
64
66struct Vector
67{
69 Vector( ) : x(0), y(0), z(0) {}
70 Vector( const float _x, const float _y, const float _z ) : x(_x), y(_y), z(_z) {}
71
73 explicit Vector( const Point& a, const Point& b ) : x(b.x - a.x), y(b.y - a.y), z(b.z - a.z) {}
74
76 Vector( const vec3& v ); // l'implementation se trouve en fin de fichier, la structure vec3 n'est pas encore connue.
77 Vector( const vec4& v ); // l'implementation se trouve en fin de fichier, la structure vec3 n'est pas encore connue.
79 Vector( const Point& a ); // l'implementation se trouve en fin de fichier.
80
82 float operator() ( const unsigned int i ) const; // l'implementation se trouve en fin de fichier
83 float& operator() ( const unsigned int i ); // l'implementation se trouve en fin de fichier
84
85 float x, y, z;
86};
87
89Vector normalize( const Vector& v );
91Vector cross( const Vector& u, const Vector& v );
93float dot( const Vector& u, const Vector& v );
95float length( const Vector& v );
97float length2( const Vector& v );
98
100Vector operator- ( const Point& a, const Point& b );
101
103Point operator+ ( const Point& a, const Point& b );
104
106Point operator* ( const float k, const Point& a );
108Point operator* ( const Point& a, const float k );
110Point operator* ( const Point& a, const Point& b );
112Point operator/ ( const Point& a, const float k );
114Point operator/ ( const float k, const Point& a );
116Point operator/ ( const Point& a, const Point& b );
117
119Vector operator- ( const Vector& v );
120
122Point operator+ ( const Point& a, const Vector& v );
124Point operator+ ( const Vector& v, const Point& a );
126Point operator- ( const Vector& v, const Point& a );
128Point operator- ( const Point& a, const Vector& v );
130Vector operator+ ( const Vector& u, const Vector& v );
132Vector operator- ( const Vector& u, const Vector& v );
134Vector operator+ ( const float k, const Vector& v );
135Vector operator+ ( const Vector& v, const float k );
136
138Vector operator* ( const float k, const Vector& v );
140Vector operator* ( const Vector& v, const float k );
141
143Vector operator* ( const Vector& a, const Vector& b );
145Vector operator/ ( const Vector& v, const float k );
147Vector operator/ ( const Vector& u, const Vector& v );
148
149
151struct vec2
152{
154 vec2( ) : x(0), y(0) {}
155 vec2( const float _x, const float _y ) : x(_x), y(_y) {}
156 vec2( const vec3& v ); // ne conserve que x et y
157 vec2( const vec4& v ); // ne conserve que x et y
158
160 float operator() ( const unsigned int i ) const { return (&x)[i]; }
161 float& operator() ( const unsigned int i ) { return (&x)[i]; }
162
163 float x, y;
164};
165
166
168struct vec3
169{
171 vec3( ) : x(0), y(0), z(0) {}
172 vec3( const float _x, const float _y, const float _z ) : x(_x), y(_y), z(_z) {}
174 vec3( const vec2& v, const float _z ) : x(v.x), y(v.y), z(_z) {}
175 vec3( const vec4& v ); // ne conserve que x, y et z
176
178 vec3( const Point& a );
180 vec3( const Vector& v );
181
183 float operator() ( const unsigned int i ) const { return (&x)[i]; }
184 float& operator() ( const unsigned int i ) { return (&x)[i]; }
185
186 float x, y, z;
187};
188
189
191struct vec4
192{
194 vec4( ) : x(0), y(0), z(0), w(0) {}
195 vec4( const float _x, const float _y, const float _z, const float _w ) : x(_x), y(_y), z(_z), w(_w) {}
197 vec4( const vec2& v, const float _z= 0, const float _w= 0 ) : x(v.x), y(v.y), z(_z), w(_w) {}
199 vec4( const vec3& v, const float _w= 0 ) : x(v.x), y(v.y), z(v.z), w(_w) {}
200
202 vec4( const Point& a );
204 vec4( const Vector& v );
205
207 float operator() ( const unsigned int i ) const { return (&x)[i]; }
208 float& operator() ( const unsigned int i ) { return (&x)[i]; }
209
210 float x, y, z, w;
211};
212
213
214// implementation des constructeurs explicites.
215inline Point::Point( const vec2& v, const float z ) : x(v.x), y(v.y), z(z) {}
216inline Point::Point( const vec3& v ) : x(v.x), y(v.y), z(v.z) {}
217inline Point::Point( const vec4& v ) : x(v.x), y(v.y), z(v.z) {}
218inline Point::Point( const Vector& v ) : x(v.x), y(v.y), z(v.z) {}
219
220inline Vector::Vector( const vec3& v ) : x(v.x), y(v.y), z(v.z) {}
221inline Vector::Vector( const vec4& v ) : x(v.x), y(v.y), z(v.z) {}
222inline Vector::Vector( const Point& a ) : x(a.x), y(a.y), z(a.z) {}
223
224inline vec2::vec2( const vec3& v ) : x(v.x), y(v.y) {}
225inline vec2::vec2( const vec4& v ) : x(v.x), y(v.y) {}
226
227inline vec3::vec3( const vec4& v ) : x(v.x), y(v.y), z(v.z) {}
228
229inline vec3::vec3( const Point& a ) : x(a.x), y(a.y), z(a.z) {}
230inline vec3::vec3( const Vector& v ) : x(v.x), y(v.y), z(v.z) {}
231
232inline vec4::vec4( const Point& a ) : x(a.x), y(a.y), z(a.z), w(1.f) {}
233inline vec4::vec4( const Vector& v ) : x(v.x), y(v.y), z(v.z), w(0.f) {}
234
235//
236inline float Point::operator( ) ( const unsigned int i ) const { return (&x)[i]; }
237inline float Vector::operator( ) ( const unsigned int i ) const { return (&x)[i]; }
238
239inline float& Point::operator( ) ( const unsigned int i ) { return (&x)[i]; }
240inline float& Vector::operator( ) ( const unsigned int i ) { return (&x)[i]; }
241
242//
243#include <iostream>
244
245inline std::ostream& operator<<(std::ostream& o, const Point& p)
246{
247 o<<"p("<<p.x<<","<<p.y<<","<<p.z<<")";
248 return o;
249}
250
251inline std::ostream& operator<<(std::ostream& o, const Vector& v)
252{
253 o<<"v("<<v.x<<","<<v.y<<","<<v.z<<")";
254 return o;
255}
256
258#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
void minmax(const Vector &a, const Vector &b, Vector &vmin, Vector &vmax)
renvoie min(a, b) dans vmin, et max(a, b) dans vmax. mais en plus rapide.
Definition vec.cpp:50
Vector operator-(const Point &a, const Point &b)
renvoie le vecteur a - b.
Definition vec.cpp:58
Point max(const Point &a, const Point &b)
renvoie la plus grande composante de chaque point { max(a.x, b.x), max(a.y, b.y), max(a....
Definition vec.cpp:35
Point operator*(const float k, const Point &a)
renvoie le "point" k*a;
Definition vec.cpp:63
float operator()(const unsigned int i) const
renvoie la ieme composante du point.
Definition vec.h:236
Point operator/(const Point &a, const float k)
renvoie le "point" a/k;
Definition vec.cpp:73
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:86
Point min(const Point &a, const Point &b)
renvoie la plus petite composante de chaque point { min(a.x, b.x), min(a.y, b.y), min(a....
Definition vec.cpp:30
float length2(const Vector &v)
renvoie la carre de la longueur d'un vecteur.
Definition vec.cpp:191
float operator()(const unsigned int i) const
renvoie la ieme composante du vecteur.
Definition vec.h:237
float dot(const Vector &u, const Vector &v)
renvoie le produit scalaire de 2 vecteurs.
Definition vec.cpp:181
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:167
float length(const Vector &v)
renvoie la longueur d'un vecteur.
Definition vec.cpp:186
Vector cross(const Vector &u, const Vector &v)
renvoie le produit vectoriel de 2 vecteurs.
Definition vec.cpp:173
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:67
Vector(const Point &a, const Point &b)
cree le vecteur ab.
Definition vec.h:73
Vector()
constructeur par defaut.
Definition vec.h:69
vecteur generique, utilitaire.
Definition vec.h:152
float operator()(const unsigned int i) const
renvoie la ieme composante du vecteur.
Definition vec.h:160
vec2()
constructeur par defaut.
Definition vec.h:154
vecteur generique, utilitaire.
Definition vec.h:169
vec3(const vec2 &v, const float _z)
constructeur par defaut.
Definition vec.h:174
float operator()(const unsigned int i) const
renvoie la ieme composante du vecteur.
Definition vec.h:183
vec3()
constructeur par defaut.
Definition vec.h:171
vecteur generique 4d, ou 3d homogene, utilitaire.
Definition vec.h:192
vec4(const vec3 &v, const float _w=0)
constructeur par defaut.
Definition vec.h:199
vec4()
constructeur par defaut.
Definition vec.h:194
float operator()(const unsigned int i) const
renvoie la ieme composante du vecteur.
Definition vec.h:207
vec4(const vec2 &v, const float _z=0, const float _w=0)
constructeur par defaut.
Definition vec.h:197