gKit2 light

- Main Page
- Related Pages
- Modules
- Classes
- Files

- File List
- File Members

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::vec3
vec3(const vec2 &a, const float _z)
constructeur par defaut.
Definition: vec.h:109
operator-
Vector operator-(const Point &a, const Point &b)
renvoie le vecteur a - b.
Definition: vec.cpp:22
operator/
Vector operator/(const Vector &v, const float k)
renvoie le vecteur v/k;
Definition: vec.cpp:73
length
float length(const Vector &v)
renvoie la longueur d'un vecteur.
Definition: vec.cpp:98
normalize
Vector normalize(const Vector &v)
renvoie un vecteur unitaire / longueur == 1.
Definition: vec.cpp:79
vec3
vecteur generique, utilitaire.
Definition: vec.h:104
length2
float length2(const Vector &v)
renvoie la carre de la longueur d'un vecteur.
Definition: vec.cpp:103
Vector::Vector
Vector(const Point &a, const Point &b)
cree le vecteur ab.
Definition: vec.h:47
vec3::vec3
vec3(const float _x=0, const float _y=0, const float _z=0)
constructeur par defaut.
Definition: vec.h:107
vec2
vecteur generique, utilitaire.
Definition: vec.h:94
vec4
vecteur generique 4d, ou 3d homogene, utilitaire.
Definition: vec.h:121
Vector
representation d'un vecteur 3d.
Definition: vec.h:42
Vector::Vector
Vector(const float _x=0, const float _y=0, const float _z=0)
constructeur par defaut.
Definition: vec.h:45
vec4::vec4
vec4(const vec2 &v, const float _z=0, const float _w=0)
constructeur par defaut.
Definition: vec.h:126
operator*
Vector operator*(const float k, const Vector &v)
renvoie le vecteur k*u;
Definition: vec.cpp:63
dot
float dot(const Vector &u, const Vector &v)
renvoie le produit scalaire de 2 vecteurs.
Definition: vec.cpp:93
vec4::vec4
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::Point
Point(const float _x=0, const float _y=0, const float _z=0)
constructeur par defaut.
Definition: vec.h:22
distance
float distance(const Point &a, const Point &b)
renvoie la distance etre 2 points.
Definition: vec.cpp:7
Point
representation d'un point 3d.
Definition: vec.h:19
cross
Vector cross(const Vector &u, const Vector &v)
renvoie le produit vectoriel de 2 vecteurs.
Definition: vec.cpp:85
vec4::vec4
vec4(const vec3 &v, const float _w=0)
constructeur par defaut.
Definition: vec.h:128
vec2::vec2
vec2(const float _x=0, const float _y=0)
constructeur par defaut.
Definition: vec.h:97
center
Point center(const Point &a, const Point &b)
renvoie le milieu du segment ab.
Definition: vec.cpp:17
operator+
Point operator+(const Point &a, const Vector &v)
renvoie le point a+v.
Definition: vec.cpp:33
distance2
float distance2(const Point &a, const Point &b)
renvoie le carre de la distance etre 2 points.
Definition: vec.cpp:12