Recast Navigation  1.0.35
Vector.h
Go to the documentation of this file.
1 //
2 // Vector.h
3 // Recast
4 //
5 // Created by Graham Pentheny on 7/31/15.
6 //
7 //
8 
9 #ifndef Recast_Vector_h
10 #define Recast_Vector_h
11 
15 
20 inline void rcVcross(float* dest, const float* v1, const float* v2)
21 {
22  dest[0] = v1[1]*v2[2] - v1[2]*v2[1];
23  dest[1] = v1[2]*v2[0] - v1[0]*v2[2];
24  dest[2] = v1[0]*v2[1] - v1[1]*v2[0];
25 }
26 
31 inline float rcVdot(const float* v1, const float* v2)
32 {
33  return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2];
34 }
35 
41 inline void rcVmad(float* dest, const float* v1, const float* v2, const float s)
42 {
43  dest[0] = v1[0]+v2[0]*s;
44  dest[1] = v1[1]+v2[1]*s;
45  dest[2] = v1[2]+v2[2]*s;
46 }
47 
52 inline void rcVadd(float* dest, const float* v1, const float* v2)
53 {
54  dest[0] = v1[0]+v2[0];
55  dest[1] = v1[1]+v2[1];
56  dest[2] = v1[2]+v2[2];
57 }
58 
63 inline void rcVsub(float* dest, const float* v1, const float* v2)
64 {
65  dest[0] = v1[0]-v2[0];
66  dest[1] = v1[1]-v2[1];
67  dest[2] = v1[2]-v2[2];
68 }
69 
73 inline void rcVmin(float* mn, const float* v)
74 {
75  mn[0] = rcMin(mn[0], v[0]);
76  mn[1] = rcMin(mn[1], v[1]);
77  mn[2] = rcMin(mn[2], v[2]);
78 }
79 
83 inline void rcVmax(float* mx, const float* v)
84 {
85  mx[0] = rcMax(mx[0], v[0]);
86  mx[1] = rcMax(mx[1], v[1]);
87  mx[2] = rcMax(mx[2], v[2]);
88 }
89 
93 inline void rcVcopy(float* dest, const float* v)
94 {
95  dest[0] = v[0];
96  dest[1] = v[1];
97  dest[2] = v[2];
98 }
99 
104 inline float rcVdist(const float* v1, const float* v2)
105 {
106  float dx = v2[0] - v1[0];
107  float dy = v2[1] - v1[1];
108  float dz = v2[2] - v1[2];
109  return rcSqrt(dx*dx + dy*dy + dz*dz);
110 }
111 
116 inline float rcVdistSqr(const float* v1, const float* v2)
117 {
118  float dx = v2[0] - v1[0];
119  float dy = v2[1] - v1[1];
120  float dz = v2[2] - v1[2];
121  return dx*dx + dy*dy + dz*dz;
122 }
123 
126 inline void rcVnormalize(float* v)
127 {
128  float d = 1.0f / rcSqrt(rcSqr(v[0]) + rcSqr(v[1]) + rcSqr(v[2]));
129  v[0] *= d;
130  v[1] *= d;
131  v[2] *= d;
132 }
133 
134 #endif
T rcMax(T a, T b)
Returns the maximum of two values.
Definition: Util.h:30
T rcMin(T a, T b)
Returns the minimum of two values.
Definition: Util.h:24
void rcVmax(float *mx, const float *v)
Selects the maximum value of each element from the specified vectors.
Definition: Vector.h:83
float rcSqrt(float x)
Returns the square root of the value.
Definition: Recast.cpp:30
float rcVdot(const float *v1, const float *v2)
Derives the dot product of two vectors.
Definition: Vector.h:31
void rcVmad(float *dest, const float *v1, const float *v2, const float s)
Performs a scaled vector addition.
Definition: Vector.h:41
T rcSqr(T a)
Returns the square of the value.
Definition: Util.h:40
void rcVnormalize(float *v)
Normalizes the vector.
Definition: Vector.h:126
void rcVmin(float *mn, const float *v)
Selects the minimum value of each element from the specified vectors.
Definition: Vector.h:73
void rcVadd(float *dest, const float *v1, const float *v2)
Performs a vector addition.
Definition: Vector.h:52
float rcVdistSqr(const float *v1, const float *v2)
Returns the square of the distance between two points.
Definition: Vector.h:116
void rcVcopy(float *dest, const float *v)
Performs a vector copy.
Definition: Vector.h:93
void rcVsub(float *dest, const float *v1, const float *v2)
Performs a vector subtraction.
Definition: Vector.h:63
float rcVdist(const float *v1, const float *v2)
Returns the distance between two points.
Definition: Vector.h:104
void rcVcross(float *dest, const float *v1, const float *v2)
Derives the cross product of two vectors.
Definition: Vector.h:20