gKit2 light
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 
14 float distance( const Point& a, const Point& b )
15 {
16  return length(a - b);
17 }
18 
19 float distance2( const Point& a, const Point& b )
20 {
21  return length2(a - b);
22 }
23 
24 Point 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 
30 Point min( const Point& a, const Point& b )
31 {
32  return Point( std::min(a.x, b.x), std::min(a.y, b.y), std::min(a.z, b.z) );
33 }
34 
35 Point max( const Point& a, const Point& b )
36 {
37  return Point( std::max(a.x, b.x), std::max(a.y, b.y), std::max(a.z, b.z) );
38 }
39 
40 
41 Vector operator- ( const Point& a, const Point& b )
42 {
43  return Vector(a.x - b.x, a.y - b.y, a.z - b.z);
44 }
45 
46 Point operator* ( const float k, const Point& a )
47 {
48  return Point(k * a.x, k * a.y, k * a.z);
49 }
50 
51 Point operator* ( const Point& a, const float k )
52 {
53  return k * a;
54 }
55 
56 Point operator/ ( const Point& a, const float k )
57 {
58  float kk= 1.f / k;
59  return kk * a;
60 }
61 
62 Point operator+ ( const Point& a, const Point& b )
63 {
64  return Point(a.x + b.x, a.y + b.y, a.z + b.z);
65 }
66 
68 {
69  return Vector(-v.x, -v.y, -v.z);
70 }
71 
72 Point operator+ ( const Point& a, const Vector& v )
73 {
74  return Point(a.x + v.x, a.y + v.y, a.z + v.z);
75 }
76 
77 Point operator+ ( const Vector& v, const Point& a )
78 {
79  return a + v;
80 }
81 
82 Point operator- ( const Vector& v, const Point& a )
83 {
84  return a + (-v);
85 }
86 
87 Point operator- ( const Point& a, const Vector& v )
88 {
89  return a + (-v);
90 }
91 
92 Vector operator+ ( const Vector& u, const Vector& v )
93 {
94  return Vector(u.x + v.x, u.y + v.y, u.z + v.z);
95 }
96 
97 Vector operator- ( const Vector& u, const Vector& v )
98 {
99  return Vector(u.x - v.x, u.y - v.y, u.z - v.z);
100 }
101 
102 Vector operator* ( const float k, const Vector& v )
103 {
104  return Vector(k * v.x, k * v.y, k * v.z);
105 }
106 
107 Vector operator* ( const Vector& v, const float k )
108 {
109  return k * v;
110 }
111 
112 Vector operator* ( const Vector& a, const Vector& b )
113 {
114  return Vector(a.x * b.x, a.y * b.y, a.z * b.z);
115 }
116 
117 Vector operator/ ( const Vector& v, const float k )
118 {
119  float kk= 1 / k;
120  return kk * v;
121 }
122 
124 {
125  float kk= 1 / length(v);
126  return kk * v;
127 }
128 
129 Vector cross( const Vector& u, const Vector& v )
130 {
131  return Vector(
132  (u.y * v.z) - (u.z * v.y),
133  (u.z * v.x) - (u.x * v.z),
134  (u.x * v.y) - (u.y * v.x));
135 }
136 
137 float dot( const Vector& u, const Vector& v )
138 {
139  return u.x * v.x + u.y * v.y + u.z * v.z;
140 }
141 
142 float length( const Vector& v )
143 {
144  return std::sqrt(length2(v));
145 }
146 
147 float length2( const Vector& v )
148 {
149  return v.x * v.x + v.y * v.y + v.z * v.z;
150 }
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
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 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
representation d'un vecteur 3d.
Definition: vec.h:59