gKit2 light
Loading...
Searching...
No Matches
vec.cpp
1
2#include <algorithm>
3#include <cmath>
4
5#include "vec.h"
6
7
9{
10 return Point(0, 0, 0);
11}
12
13
14float distance( const Point& a, const Point& b )
15{
16 return length(a - b);
17}
18
19float distance2( const Point& a, const Point& b )
20{
21 return length2(a - b);
22}
23
24Point center( const Point& a, const Point& b )
25{
26 return Point((a.x + b.x) / 2, (a.y + b.y) / 2, (a.z + b.z) / 2);
27}
28
29
30Point min( const Point& a, const Point& b )
31{
32 return { std::min(a.x, b.x), std::min(a.y, b.y), std::min(a.z, b.z) };
33}
34
35Point max( const Point& a, const Point& b )
36{
37 return { std::max(a.x, b.x), std::max(a.y, b.y), std::max(a.z, b.z) };
38}
39
40Vector min( const Vector& a, const Vector& b )
41{
42 return { std::min(a.x, b.x), std::min(a.y, b.y), std::min(a.z, b.z) };
43}
44
45Vector max( const Vector& a, const Vector& b )
46{
47 return { std::max(a.x, b.x), std::max(a.y, b.y), std::max(a.z, b.z) };
48}
49
50void minmax( const Vector& a, const Vector& b, Vector& vmin, Vector& vmax )
51{
52 if(a.x < b.x) { vmin.x= a.x; vmax.x= b.x; } else { vmin.x= b.x; vmax.x= a.x; }
53 if(a.y < b.y) { vmin.y= a.y; vmax.y= b.y; } else { vmin.y= b.y; vmax.y= a.y; }
54 if(a.z < b.z) { vmin.z= a.z; vmax.z= b.z; } else { vmin.z= b.z; vmax.z= a.z; }
55}
56
57
58Vector operator- ( const Point& a, const Point& b )
59{
60 return Vector(a.x - b.x, a.y - b.y, a.z - b.z);
61}
62
63Point operator* ( const float k, const Point& a )
64{
65 return Point(k * a.x, k * a.y, k * a.z);
66}
67
68Point operator* ( const Point& a, const float k )
69{
70 return k * a;
71}
72
73Point operator/ ( const Point& a, const float k )
74{
75 return Point(a.x / k, a.y / k, a.z / k);
76}
77Point operator/ ( const float k, const Point& a )
78{
79 return Point(k/ a.x, k / a.y, k / a.z);
80}
81Point operator/ ( const Point& a, const Point& b )
82{
83 return Point(a.x / b.x, a.y / b.y, a.z / b.z);
84}
85
86Point operator+ ( const Point& a, const Point& b )
87{
88 return Point(a.x + b.x, a.y + b.y, a.z + b.z);
89}
90
92{
93 return Vector(-v.x, -v.y, -v.z);
94}
95
96Point operator+ ( const Point& a, const Vector& v )
97{
98 return Point(a.x + v.x, a.y + v.y, a.z + v.z);
99}
100
101Point operator+ ( const Vector& v, const Point& a )
102{
103 return a + v;
104}
105
106Point operator- ( const Vector& v, const Point& a )
107{
108 return a + (-v);
109}
110
111Point operator- ( const Point& a, const Vector& v )
112{
113 return a + (-v);
114}
115
116Vector operator+ ( const Vector& u, const Vector& v )
117{
118 return Vector(u.x + v.x, u.y + v.y, u.z + v.z);
119}
120
121Vector operator- ( const Vector& u, const Vector& v )
122{
123 return Vector(u.x - v.x, u.y - v.y, u.z - v.z);
124}
125
126
127Vector operator+ ( const float k, const Vector& v )
128{
129 return Vector(k + v.x, k + v.y, k + v.z);
130}
131Vector operator+ ( const Vector& v, const float k )
132{
133 return k + v;
134}
135
136Vector operator* ( const float k, const Vector& v )
137{
138 return Vector(k * v.x, k * v.y, k * v.z);
139}
140
141Vector operator* ( const Vector& v, const float k )
142{
143 return k * v;
144}
145
146Vector operator* ( const Vector& a, const Vector& b )
147{
148 return Vector(a.x * b.x, a.y * b.y, a.z * b.z);
149}
150
151Vector operator/ ( const Vector& v, const float k )
152{
153 return Vector(v.x / k, v.y / k, v.z / k);
154}
155
156Vector operator/ ( const float k, const Vector& v )
157{
158 return Vector(k / v.x, k / v.y, k / v.z);
159}
160
161Vector operator/ ( const Vector& u, const Vector& v )
162{
163 // si division par zero... inf dans le resultat.
164 return Vector(u.x / v.x, u.y / v.y, u.z / v.z);
165}
166
168{
169 float kk= 1 / length(v);
170 return kk * v;
171}
172
173Vector cross( const Vector& u, const Vector& v )
174{
175 return Vector(
176 u.y * v.z - u.z * v.y,
177 u.z * v.x - u.x * v.z,
178 u.x * v.y - u.y * v.x);
179}
180
181float dot( const Vector& u, const Vector& v )
182{
183 return u.x * v.x + u.y * v.y + u.z * v.z;
184}
185
186float length( const Vector& v )
187{
188 return std::sqrt(length2(v));
189}
190
191float length2( const Vector& v )
192{
193 return v.x * v.x + v.y * v.y + v.z * v.z;
194}
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
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 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
representation d'un vecteur 3d.
Definition vec.h:67