Larus glider flight sensor system 3.9.2024
Software-In-The-Loop test and validation system
Loading...
Searching...
No Matches
vector.h
Go to the documentation of this file.
1/***********************************************************************/
25#ifndef vector_H
26#define vector_H
27
28#ifndef assert
29#define assert(x)
30#endif
31
32#include "embedded_math.h"
33
34template <class datatype, int size> class matrix;
35template <class datatype> class quaternion;
36
38template <class datatype, int size>
39class vector
40{
41 friend class matrix<datatype, size>;
42 friend class quaternion<datatype>;
43public:
44
45 vector( void)
46 {
47 for( int i=0; i < size; ++i)
48 e[i]=ZERO;
49 }
50 vector( const datatype *data);
51 vector( const vector & right);
52
54 {
55 datatype retval = 0;
56 for( int i=0; i < size; ++i)
57 retval += right.e[i] * e[i];
58 return retval;
59 }
60
62 {
63 return scalar_multiply( right);
64 }
65
67 {
68 assert( size == 3); // operation not defined for vectors of other size
70 tmp.e[0]=e[1]*right.e[2]-e[2]*right.e[1];
71 tmp.e[1]=e[2]*right.e[0]-e[0]*right.e[2];
72 tmp.e[2]=e[0]*right.e[1]-e[1]*right.e[0];
73 return tmp;
74 }
75
77 datatype abs( void) const
78 {
80 for( int i=0; i< size; ++i)
81 squaresum += (e[i]*e[i]);
82 return (datatype) SQRT( squaresum);
83 };
84
87 void zero( void)
88 {
89 for( int i=0; i<size; ++i)
90 e[i]=0.0;
91 }
92 vector & negate( void)
93 {
94 for( int i=0; i<size; ++i)
95 e[i] = -e[i];
96 return *this;
97 }
100
104 {
105 vector result = *this;
106 for( int i=0; i < size; ++i)
107 result.e[i] *= right;
108 return result;
109 }
111 {
112 *this = *this * right;
113 return *this;
114 }
118 datatype & operator []( const int index)
119 {
120 assert( index < size);
121 return e[index];
122 };
123 const datatype operator []( int index) const
124 {
125 return e[index];
126 }
127
129 void normalize( void)
130 {
131 datatype norm = abs();
132 norm = ONE / norm;
133 *this *= norm;
134 }
135
136private:
138 datatype e[size];
139};
140
142template <class datatype, int size> vector <datatype, size>::vector( const vector <datatype, size> & right)
143{
144 for( int i=0; i<size; ++i)
145 e[i]=right.e[i];
146}
147
149template <class datatype, int size> vector <datatype, size>::vector( const datatype * init)
150{
151 if( init==0)
152 for( int i=0; i<size; ++i)
153 e[i]=datatype();
154 else
155 for( int i=0; i<size; ++i)
156 e[i]=*init++;
157}
158
161{
162 for( int i=0; i<size; ++i)
163 e[i]+=right.e[i];
164 return *this;
165}
166
169{
170 for( int i=0; i<size; ++i)
171 e[i]-=right.e[i];
172 return *this;
173}
174
177{
179 tmp+=right;
180 return tmp;
181}
182
183#if 0 // presently unused
184
186template <class datatype, int size> vector <datatype, size> vector <datatype, size>::operator *( const vector <datatype, size> & right) const
187{
188 // ASSERT( size == 3); // operation not defined for vectors of other size
190 tmp.e[0]=e[1]*right.e[2]-e[2]*right.e[1];
191 tmp.e[1]=e[2]*right.e[0]-e[0]*right.e[2];
192 tmp.e[2]=e[0]*right.e[1]-e[1]*right.e[0];
193 return tmp;
194}
195
196
198template <class datatype, int size> vector <datatype, size> vector <datatype, size>::operator *( const double & right) const
199{
201 tmp*=right;
202 return tmp;
203}
204
206template <class datatype, int size> vector <datatype, size> vector <datatype, size>::operator *=( const double & right)
207{
208 for( int i=0; i<size; ++i)
209 e[i]*=right;
210 return *this;
211}
212
214template <class datatype, int size> vector <datatype, size> vector <datatype, size>::operator /=( const double & right)
215{
216 for( int i=0; i<size; ++i)
217 e[i]/=right;
218 return *this;
219}
220#endif
221
224{
226 tmp-=right;
227 return tmp;
228}
229
231template <class datatype, int size>
233{
234 for( int i=0; i<size; ++i)
235 e[i]=right.e[i];
236 return *this;
237}
238
239#endif
mathematical square matrix class
Definition matrix.h:34
maintain attitude and provide coordinate transformation services
Definition quaternion.h:36
mathematical vector of arbitrary type and size
Definition vector.h:40
datatype operator*(const vector &right) const
< scalar (dot) product -> scalar
Definition vector.h:61
void normalize(void)
vector normalization
Definition vector.h:129
vector(void)
Definition vector.h:45
vector(const vector &right)
copy constructor
Definition vector.h:142
datatype & operator[](const int index)
Definition vector.h:118
vector & operator+=(const vector &right)
operator +=
Definition vector.h:160
datatype abs(void) const
vector abs operator returns absolute value
Definition vector.h:77
vector & negate(void)
Definition vector.h:92
vector & operator=(const vector &right)
vector copy operator - size checked through template
Definition vector.h:232
void zero(void)
set all elements to zero
Definition vector.h:87
vector & operator*=(const datatype &right)
Definition vector.h:110
vector(const datatype *data)
constructor from datatype []
Definition vector.h:149
vector & operator-=(const vector &right)
operator -=
Definition vector.h:168
vector operator-(const vector &right) const
operator - (vector - vector returns vector)
Definition vector.h:223
vector operator+(const vector &right) const
operator +
Definition vector.h:176
vector vector_multiply(const vector &right) const
< vector cross product -> vector
Definition vector.h:66
datatype scalar_multiply(const vector &right) const
< scalar product
Definition vector.h:53
defines platform-dependent algorithms and constants
#define ONE
#define ZERO
#define SQRT(x)
#define assert(x)
Definition vector.h:29