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 
19 struct Point
20 {
22  Point( const float _x= 0, const float _y= 0, const float _z= 0 ) : x(_x), y(_y), z(_z) {}
23 
25  explicit Point( const vec3& v ); // l'implementation se trouve en fin de fichier, la structure vec3 n'est pas encore connue.
27  explicit Point( const Vector& v ); // l'implementation se trouve en fin de fichier, la structure vector n'est pas encore connue.
28 
29  float x, y, z;
30 };
31 
33 float distance( const Point& a, const Point& b );
35 float distance2( const Point& a, const Point& b );
36 
38 Point center( const Point& a, const Point& b );
39 
40 
42 struct Vector
43 {
45  Vector( const float _x= 0, const float _y= 0, const float _z= 0) : x(_x), y(_y), z(_z) {}
47  Vector( const Point& a, const Point& b ) : x(b.x - a.x), y(b.y - a.y), z(b.z - a.z) {}
48 
50  explicit Vector( const vec3& v ); // l'implementation se trouve en fin de fichier, la structure vec3 n'est pas encore connue.
52  explicit Vector( const Point& a ); // l'implementation se trouve en fin de fichier.
53 
54  float x, y, z;
55 };
56 
58 Vector normalize( const Vector& v );
60 Vector cross( const Vector& u, const Vector& v );
62 float dot( const Vector& u, const Vector& v );
64 float length( const Vector& v );
66 float length2( const Vector& v );
67 
69 Vector operator- ( const Point& a, const Point& b );
71 Vector operator- ( const Vector& v );
72 
74 Point operator+ ( const Point& a, const Vector& v );
76 Point operator+ ( const Vector& v, const Point& a );
78 Point operator- ( const Vector& v, const Point& a );
80 Point operator- ( const Point& a, const Vector& v );
82 Vector operator+ ( const Vector& u, const Vector& v );
84 Vector operator- ( const Vector& u, const Vector& v );
86 Vector operator* ( const float k, const Vector& v );
88 Vector operator* ( const Vector& v, const float k );
90 Vector operator/ ( const Vector& v, const float k );
91 
92 
94 struct vec2
95 {
97  vec2( const float _x= 0, const float _y= 0 ) : x(_x), y(_y) {}
98 
99  float x, y;
100 };
101 
102 
104 struct vec3
105 {
107  vec3( const float _x= 0, const float _y= 0, const float _z= 0 ) : x(_x), y(_y), z(_z) {}
109  vec3( const vec2& a, const float _z ) : x(a.x), y(a.y), z(_z) {}
110 
112  explicit vec3( const Point& a ); // l'implementation se trouve en fin de fichier.
114  explicit vec3( const Vector& v ); // l'implementation se trouve en fin de fichier.
115 
116  float x, y, z;
117 };
118 
119 
121 struct vec4
122 {
124  vec4( const float _x= 0, const float _y= 0, const float _z= 0, const float _w= 0 ) : x(_x), y(_y), z(_z), w(_w) {}
126  vec4( const vec2& v, const float _z= 0, const float _w= 0 ) : x(v.x), y(v.y), z(_z), w(_w) {}
128  vec4( const vec3& v, const float _w= 0 ) : x(v.x), y(v.y), z(v.z), w(_w) {}
129 
131  explicit vec4( const Point& a ); // l'implementation se trouve en fin de fichier.
133  explicit vec4( const Vector& v ); // l'implementation se trouve en fin de fichier.
134 
135  float x, y, z, w;
136 };
137 
138 
139 // implementation des constructeurs explicites.
140 inline Point::Point( const vec3& v ) : x(v.x), y(v.y), z(v.z) {}
141 inline Point::Point( const Vector& v ) : x(v.x), y(v.y), z(v.z) {}
142 
143 inline Vector::Vector( const vec3& v ) : x(v.x), y(v.y), z(v.z) {}
144 inline Vector::Vector( const Point& a ) : x(a.x), y(a.y), z(a.z) {}
145 
146 inline vec3::vec3( const Point& a ) : x(a.x), y(a.y), z(a.z) {}
147 inline vec3::vec3( const Vector& v ) : x(v.x), y(v.y), z(v.z) {}
148 
149 inline vec4::vec4( const Point& a ) : x(a.x), y(a.y), z(a.z), w(1.f) {}
150 inline vec4::vec4( const Vector& v ) : x(v.x), y(v.y), z(v.z), w(0.f) {}
151 
152 #include <iostream>
153 
154 inline std::ostream& operator<<(std::ostream& o, const Point& p)
155 {
156  o<<"p("<<p.x<<","<<p.y<<","<<p.z<<")";
157  return o;
158 }
159 
160 inline std::ostream& operator<<(std::ostream& o, const Vector& v)
161 {
162  o<<"v("<<v.x<<","<<v.y<<","<<v.z<<")";
163  return o;
164 }
165 
167 #endif
vec3(const vec2 &a, const float _z)
constructeur par defaut.
Definition: vec.h:109
Vector operator-(const Point &a, const Point &b)
renvoie le vecteur a - b.
Definition: vec.cpp:22
Vector operator/(const Vector &v, const float k)
renvoie le vecteur v/k;
Definition: vec.cpp:73
float length(const Vector &v)
renvoie la longueur d'un vecteur.
Definition: vec.cpp:98
Vector normalize(const Vector &v)
renvoie un vecteur unitaire / longueur == 1.
Definition: vec.cpp:79
vecteur generique, utilitaire.
Definition: vec.h:104
float length2(const Vector &v)
renvoie la carre de la longueur d'un vecteur.
Definition: vec.cpp:103
Vector(const Point &a, const Point &b)
cree le vecteur ab.
Definition: vec.h:47
vec3(const float _x=0, const float _y=0, const float _z=0)
constructeur par defaut.
Definition: vec.h:107
vecteur generique, utilitaire.
Definition: vec.h:94
vecteur generique 4d, ou 3d homogene, utilitaire.
Definition: vec.h:121
representation d'un vecteur 3d.
Definition: vec.h:42
Vector(const float _x=0, const float _y=0, const float _z=0)
constructeur par defaut.
Definition: vec.h:45
vec4(const vec2 &v, const float _z=0, const float _w=0)
constructeur par defaut.
Definition: vec.h:126
Vector operator*(const float k, const Vector &v)
renvoie le vecteur k*u;
Definition: vec.cpp:63
float dot(const Vector &u, const Vector &v)
renvoie le produit scalaire de 2 vecteurs.
Definition: vec.cpp:93
vec4(const float _x=0, const float _y=0, const float _z=0, const float _w=0)
constructeur par defaut.
Definition: vec.h:124
Point(const float _x=0, const float _y=0, const float _z=0)
constructeur par defaut.
Definition: vec.h:22
float distance(const Point &a, const Point &b)
renvoie la distance etre 2 points.
Definition: vec.cpp:7
representation d'un point 3d.
Definition: vec.h:19
Vector cross(const Vector &u, const Vector &v)
renvoie le produit vectoriel de 2 vecteurs.
Definition: vec.cpp:85
vec4(const vec3 &v, const float _w=0)
constructeur par defaut.
Definition: vec.h:128
vec2(const float _x=0, const float _y=0)
constructeur par defaut.
Definition: vec.h:97
Point center(const Point &a, const Point &b)
renvoie le milieu du segment ab.
Definition: vec.cpp:17
Point operator+(const Point &a, const Vector &v)
renvoie le point a+v.
Definition: vec.cpp:33
float distance2(const Point &a, const Point &b)
renvoie le carre de la distance etre 2 points.
Definition: vec.cpp:12