gKit2 light
vec.h
Go to the documentation of this file.
1 
2 #ifndef _VEC_H
3 #define _VEC_H
4 
5 
8 
11 
13 struct vec2;
14 struct vec3;
15 struct vec4;
16 struct Vector;
17 struct Point;
18 
20 struct Point
21 {
23  Point( ) : x(0), y(0), z(0) {}
24  explicit Point( const float _x, const float _y, const float _z ) : x(_x), y(_y), z(_z) {}
25 
27  Point( const vec2& v, const float z ); // l'implementation se trouve en fin de fichier, la structure vec3 n'est pas encore connue.
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  explicit 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 
41 Point Origin( );
42 
44 float distance( const Point& a, const Point& b );
46 float distance2( const Point& a, const Point& b );
47 
49 Point center( const Point& a, const Point& b );
50 
52 Point min( const Point& a, const Point& b );
54 Point max( const Point& a, const Point& b );
55 
56 
58 struct Vector
59 {
61  Vector( ) : x(0), y(0), z(0) {}
62  explicit Vector( const float _x, const float _y, const float _z ) : x(_x), y(_y), z(_z) {}
63 
65  explicit Vector( const Point& a, const Point& b ) : x(b.x - a.x), y(b.y - a.y), z(b.z - a.z) {}
66 
68  Vector( const vec3& v ); // l'implementation se trouve en fin de fichier, la structure vec3 n'est pas encore connue.
69  Vector( const vec4& v ); // l'implementation se trouve en fin de fichier, la structure vec3 n'est pas encore connue.
71  explicit Vector( const Point& a ); // l'implementation se trouve en fin de fichier.
72 
74  float operator() ( const unsigned int i ) const; // l'implementation se trouve en fin de fichier
75  float& operator() ( const unsigned int i ); // l'implementation se trouve en fin de fichier
76 
77  float x, y, z;
78 };
79 
81 Vector normalize( const Vector& v );
83 Vector cross( const Vector& u, const Vector& v );
85 float dot( const Vector& u, const Vector& v );
87 float length( const Vector& v );
89 float length2( const Vector& v );
90 
92 Vector operator- ( const Point& a, const Point& b );
93 
95 Point operator+ ( const Point& a, const Point& b );
96 
98 Point operator* ( const float k, const Point& a );
100 Point operator* ( const Point& a, const float k );
102 Point operator/ ( const Point& a, const float k );
103 
105 Vector operator- ( const Vector& v );
106 
108 Point operator+ ( const Point& a, const Vector& v );
110 Point operator+ ( const Vector& v, const Point& a );
112 Point operator- ( const Vector& v, const Point& a );
114 Point operator- ( const Point& a, const Vector& v );
116 Vector operator+ ( const Vector& u, const Vector& v );
118 Vector operator- ( const Vector& u, const Vector& v );
120 Vector operator* ( const float k, const Vector& v );
122 Vector operator* ( const Vector& v, const float k );
124 Vector operator* ( const Vector& a, const Vector& b );
126 Vector operator/ ( const Vector& v, const float k );
127 
128 
130 struct vec2
131 {
133  vec2( ) : x(0), y(0) {}
134  explicit vec2( const float _x, const float _y ) : x(_x), y(_y) {}
135 
137  float operator() ( const unsigned int i ) const { return (&x)[i]; }
138  float& operator() ( const unsigned int i ) { return (&x)[i]; }
139 
140  float x, y;
141 };
142 
143 
145 struct vec3
146 {
148  vec3( ) : x(0), y(0), z(0) {}
149  explicit vec3( const float _x, const float _y, const float _z ) : x(_x), y(_y), z(_z) {}
151  vec3( const vec2& a, const float _z ) : x(a.x), y(a.y), z(_z) {}
152 
154  vec3( const Point& a ); // l'implementation se trouve en fin de fichier.
156  vec3( const Vector& v ); // l'implementation se trouve en fin de fichier.
157 
159  float operator() ( const unsigned int i ) const { return (&x)[i]; }
160  float& operator() ( const unsigned int i ) { return (&x)[i]; }
161 
162  float x, y, z;
163 };
164 
165 
167 struct vec4
168 {
170  vec4( ) : x(0), y(0), z(0), w(0) {}
171  explicit vec4( const float _x, const float _y, const float _z, const float _w ) : x(_x), y(_y), z(_z), w(_w) {}
173  vec4( const vec2& v, const float _z= 0, const float _w= 0 ) : x(v.x), y(v.y), z(_z), w(_w) {}
175  vec4( const vec3& v, const float _w= 0 ) : x(v.x), y(v.y), z(v.z), w(_w) {}
176 
178  vec4( const Point& a ); // l'implementation se trouve en fin de fichier.
180  vec4( const Vector& v ); // l'implementation se trouve en fin de fichier.
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, w;
187 };
188 
189 
190 // implementation des constructeurs explicites.
191 inline Point::Point( const vec2& v, const float z ) : x(v.x), y(v.y), z(z) {}
192 inline Point::Point( const vec3& v ) : x(v.x), y(v.y), z(v.z) {}
193 inline Point::Point( const vec4& v ) : x(v.x), y(v.y), z(v.z) {}
194 inline Point::Point( const Vector& v ) : x(v.x), y(v.y), z(v.z) {}
195 
196 inline Vector::Vector( const vec3& v ) : x(v.x), y(v.y), z(v.z) {}
197 inline Vector::Vector( const vec4& v ) : x(v.x), y(v.y), z(v.z) {}
198 inline Vector::Vector( const Point& a ) : x(a.x), y(a.y), z(a.z) {}
199 
200 inline vec3::vec3( const Point& a ) : x(a.x), y(a.y), z(a.z) {}
201 inline vec3::vec3( const Vector& v ) : x(v.x), y(v.y), z(v.z) {}
202 
203 inline vec4::vec4( const Point& a ) : x(a.x), y(a.y), z(a.z), w(1.f) {}
204 inline vec4::vec4( const Vector& v ) : x(v.x), y(v.y), z(v.z), w(0.f) {}
205 
206 //
207 inline float Point::operator( ) ( const unsigned int i ) const { return (&x)[i]; }
208 inline float Vector::operator( ) ( const unsigned int i ) const { return (&x)[i]; }
209 
210 inline float& Point::operator( ) ( const unsigned int i ) { return (&x)[i]; }
211 inline float& Vector::operator( ) ( const unsigned int i ) { return (&x)[i]; }
212 
213 //
214 #include <iostream>
215 
216 inline std::ostream& operator<<(std::ostream& o, const Point& p)
217 {
218  o<<"p("<<p.x<<","<<p.y<<","<<p.z<<")";
219  return o;
220 }
221 
222 inline std::ostream& operator<<(std::ostream& o, const Vector& v)
223 {
224  o<<"v("<<v.x<<","<<v.y<<","<<v.z<<")";
225  return o;
226 }
227 
229 #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:207
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:147
float operator()(const unsigned int i) const
renvoie la ieme composante du vecteur.
Definition: vec.h:208
float dot(const Vector &u, const Vector &v)
renvoie le produit scalaire de 2 vecteurs.
Definition: vec.cpp:137
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:123
float length(const Vector &v)
renvoie la longueur d'un vecteur.
Definition: vec.cpp:142
Vector cross(const Vector &u, const Vector &v)
renvoie le produit vectoriel de 2 vecteurs.
Definition: vec.cpp:129
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:59
Vector(const Point &a, const Point &b)
cree le vecteur ab.
Definition: vec.h:65
Vector()
constructeur par defaut.
Definition: vec.h:61
vecteur generique, utilitaire.
Definition: vec.h:131
float operator()(const unsigned int i) const
renvoie la ieme composante du vecteur.
Definition: vec.h:137
vec2()
constructeur par defaut.
Definition: vec.h:133
vecteur generique, utilitaire.
Definition: vec.h:146
float operator()(const unsigned int i) const
renvoie la ieme composante du vecteur.
Definition: vec.h:159
vec3(const vec2 &a, const float _z)
constructeur par defaut.
Definition: vec.h:151
vec3()
constructeur par defaut.
Definition: vec.h:148
vecteur generique 4d, ou 3d homogene, utilitaire.
Definition: vec.h:168
vec4(const vec3 &v, const float _w=0)
constructeur par defaut.
Definition: vec.h:175
vec4()
constructeur par defaut.
Definition: vec.h:170
float operator()(const unsigned int i) const
renvoie la ieme composante du vecteur.
Definition: vec.h:183
vec4(const vec2 &v, const float _z=0, const float _w=0)
constructeur par defaut.
Definition: vec.h:173