ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-4/src/math/Vector.hpp
(Generate patch)

Comparing trunk/OOPSE-4/src/math/Vector.hpp (file contents):
Revision 2069 by tim, Tue Mar 1 20:10:14 2005 UTC vs.
Revision 2204 by gezelter, Fri Apr 15 22:04:00 2005 UTC

# Line 1 | Line 1
1 < /*
1 > /*
2   * Copyright (c) 2005 The University of Notre Dame. All Rights Reserved.
3   *
4   * The University of Notre Dame grants you ("Licensee") a
# Line 55 | Line 55 | namespace oopse {
55   #include <math.h>
56   namespace oopse {
57  
58 <    static const double epsilon = 0.000001;
58 >  static const double epsilon = 0.000001;
59  
60 <    template<typename T>
61 <    inline bool equal(T e1, T e2) {
62 <        return e1 == e2;
63 <    }
60 >  template<typename T>
61 >  inline bool equal(T e1, T e2) {
62 >    return e1 == e2;
63 >  }
64  
65 <    template<>
66 <    inline bool equal(float e1, float e2) {
67 <        return fabs(e1 - e2) < epsilon;
68 <    }
65 >  template<>
66 >  inline bool equal(float e1, float e2) {
67 >    return fabs(e1 - e2) < epsilon;
68 >  }
69  
70 <    template<>
71 <    inline bool equal(double e1, double e2) {
72 <        return fabs(e1 - e2) < epsilon;
73 <    }
70 >  template<>
71 >  inline bool equal(double e1, double e2) {
72 >    return fabs(e1 - e2) < epsilon;
73 >  }
74  
75      
76 <    /**
77 <     * @class Vector Vector.hpp "math/Vector.hpp"
78 <     * @brief Fix length vector class
79 <     */
80 <    template<typename Real, unsigned int Dim>
81 <    class Vector{
82 <        public:
76 >  /**
77 >   * @class Vector Vector.hpp "math/Vector.hpp"
78 >   * @brief Fix length vector class
79 >   */
80 >  template<typename Real, unsigned int Dim>
81 >  class Vector{
82 >  public:
83  
84 <            typedef Real ElemType;
85 <            typedef Real* ElemPoinerType;
84 >    typedef Real ElemType;
85 >    typedef Real* ElemPoinerType;
86  
87 <            /** default constructor */
88 <            inline Vector(){
89 <                for (unsigned int i = 0; i < Dim; i++)
90 <                    this->data_[i] = 0;
91 <            }
87 >    /** default constructor */
88 >    inline Vector(){
89 >      for (unsigned int i = 0; i < Dim; i++)
90 >        this->data_[i] = 0;
91 >    }
92  
93 <            /** Constructs and initializes a Vector from a vector */
94 <            inline Vector(const Vector<Real, Dim>& v) {
95 <                *this  = v;
96 <            }
93 >    /** Constructs and initializes a Vector from a vector */
94 >    inline Vector(const Vector<Real, Dim>& v) {
95 >      *this  = v;
96 >    }
97  
98 <            /** copy assignment operator */
99 <            inline Vector<Real, Dim>& operator=(const Vector<Real, Dim>& v) {
100 <                if (this == &v)
101 <                    return *this;
98 >    /** copy assignment operator */
99 >    inline Vector<Real, Dim>& operator=(const Vector<Real, Dim>& v) {
100 >      if (this == &v)
101 >        return *this;
102                  
103 <                for (unsigned int i = 0; i < Dim; i++)            
104 <                    this->data_[i] = v[i];
103 >      for (unsigned int i = 0; i < Dim; i++)            
104 >        this->data_[i] = v[i];
105                  
106 <                return *this;
107 <            }
106 >      return *this;
107 >    }
108  
109 <            template<typename T>
110 <            inline Vector(const T& s){
111 <                for (unsigned int i = 0; i < Dim; i++)
112 <                    this->data_[i] = s;
113 <            }
109 >    template<typename T>
110 >    inline Vector(const T& s){
111 >      for (unsigned int i = 0; i < Dim; i++)
112 >        this->data_[i] = s;
113 >    }
114              
115 <            /** Constructs and initializes a Vector from an array */            
116 <            inline Vector( Real* v) {
117 <                for (unsigned int i = 0; i < Dim; i++)
118 <                    this->data_[i] = v[i];
119 <            }
115 >    /** Constructs and initializes a Vector from an array */            
116 >    inline Vector( Real* v) {
117 >      for (unsigned int i = 0; i < Dim; i++)
118 >        this->data_[i] = v[i];
119 >    }
120  
121 <            /**
122 <             * Returns reference of ith element.
123 <             * @return reference of ith element
124 <             * @param i index
125 <             */
126 <            inline Real& operator[](unsigned int  i) {
127 <                assert( i < Dim);
128 <                return this->data_[i];
129 <            }
121 >    /**
122 >     * Returns reference of ith element.
123 >     * @return reference of ith element
124 >     * @param i index
125 >     */
126 >    inline Real& operator[](unsigned int  i) {
127 >      assert( i < Dim);
128 >      return this->data_[i];
129 >    }
130  
131 <            /**
132 <             * Returns reference of ith element.
133 <             * @return reference of ith element
134 <             * @param i index
135 <             */
136 <            inline Real& operator()(unsigned int  i) {
137 <                assert( i < Dim);
138 <                return this->data_[i];
139 <            }
131 >    /**
132 >     * Returns reference of ith element.
133 >     * @return reference of ith element
134 >     * @param i index
135 >     */
136 >    inline Real& operator()(unsigned int  i) {
137 >      assert( i < Dim);
138 >      return this->data_[i];
139 >    }
140  
141 <            /**
142 <             * Returns constant reference of ith element.
143 <             * @return reference of ith element
144 <             * @param i index
145 <             */
146 <            inline  const Real& operator[](unsigned int i) const {
147 <                assert( i < Dim);
148 <                return this->data_[i];
149 <            }
141 >    /**
142 >     * Returns constant reference of ith element.
143 >     * @return reference of ith element
144 >     * @param i index
145 >     */
146 >    inline  const Real& operator[](unsigned int i) const {
147 >      assert( i < Dim);
148 >      return this->data_[i];
149 >    }
150  
151 <            /**
152 <             * Returns constant reference of ith element.
153 <             * @return reference of ith element
154 <             * @param i index
155 <             */
156 <            inline  const Real& operator()(unsigned int i) const {
157 <                assert( i < Dim);
158 <                return this->data_[i];
159 <            }
151 >    /**
152 >     * Returns constant reference of ith element.
153 >     * @return reference of ith element
154 >     * @param i index
155 >     */
156 >    inline  const Real& operator()(unsigned int i) const {
157 >      assert( i < Dim);
158 >      return this->data_[i];
159 >    }
160  
161 <            /** Copy the internal data to an array*/
162 <            void getArray(Real* array) {
163 <                for (unsigned int i = 0; i < Dim; i ++) {
164 <                    array[i] = this->data_[i];
165 <                }                
166 <            }
161 >    /** Copy the internal data to an array*/
162 >    void getArray(Real* array) {
163 >      for (unsigned int i = 0; i < Dim; i ++) {
164 >        array[i] = this->data_[i];
165 >      }                
166 >    }
167  
168 <            /** Returns the pointer of internal array */
169 <            Real* getArrayPointer() {
170 <                return this->data_;
171 <            }
168 >    /** Returns the pointer of internal array */
169 >    Real* getArrayPointer() {
170 >      return this->data_;
171 >    }
172              
173 <            /**
174 <             * Tests if this vetor is equal to other vector
175 <             * @return true if equal, otherwise return false
176 <             * @param v vector to be compared
177 <             */
178 <             inline bool operator ==(const Vector<Real, Dim>& v) {
179 <
180 <                for (unsigned int i = 0; i < Dim; i ++) {
181 <                    if (!equal(this->data_[i], v[i])) {
182 <                        return false;
183 <                    }
184 <                }
173 >    /**
174 >     * Tests if this vetor is equal to other vector
175 >     * @return true if equal, otherwise return false
176 >     * @param v vector to be compared
177 >     */
178 >    inline bool operator ==(const Vector<Real, Dim>& v) {
179 >
180 >      for (unsigned int i = 0; i < Dim; i ++) {
181 >        if (!equal(this->data_[i], v[i])) {
182 >          return false;
183 >        }
184 >      }
185                  
186 <                return true;
187 <            }
186 >      return true;
187 >    }
188  
189 <            /**
190 <             * Tests if this vetor is not equal to other vector
191 <             * @return true if equal, otherwise return false
192 <             * @param v vector to be compared
193 <             */
194 <            inline bool operator !=(const Vector<Real, Dim>& v) {
195 <                return !(*this == v);
196 <            }
189 >    /**
190 >     * Tests if this vetor is not equal to other vector
191 >     * @return true if equal, otherwise return false
192 >     * @param v vector to be compared
193 >     */
194 >    inline bool operator !=(const Vector<Real, Dim>& v) {
195 >      return !(*this == v);
196 >    }
197              
198 <            /** Negates the value of this vector in place. */          
199 <            inline void negate() {
200 <                for (unsigned int i = 0; i < Dim; i++)
201 <                    this->data_[i] = -this->data_[i];
202 <            }
198 >    /** Negates the value of this vector in place. */          
199 >    inline void negate() {
200 >      for (unsigned int i = 0; i < Dim; i++)
201 >        this->data_[i] = -this->data_[i];
202 >    }
203  
204 <            /**
205 <            * Sets the value of this vector to the negation of vector v1.
206 <            * @param v1 the source vector
207 <            */
208 <            inline void negate(const Vector<Real, Dim>& v1) {
209 <                for (unsigned int i = 0; i < Dim; i++)
210 <                    this->data_[i] = -v1.data_[i];
204 >    /**
205 >     * Sets the value of this vector to the negation of vector v1.
206 >     * @param v1 the source vector
207 >     */
208 >    inline void negate(const Vector<Real, Dim>& v1) {
209 >      for (unsigned int i = 0; i < Dim; i++)
210 >        this->data_[i] = -v1.data_[i];
211  
212 <            }
212 >    }
213              
214 <            /**
215 <            * Sets the value of this vector to the sum of itself and v1 (*this += v1).
216 <            * @param v1 the other vector
217 <            */
218 <            inline void add( const Vector<Real, Dim>& v1 ) {
219 <                for (unsigned int i = 0; i < Dim; i++)
220 <                    this->data_[i] += v1.data_[i];
221 <            }
214 >    /**
215 >     * Sets the value of this vector to the sum of itself and v1 (*this += v1).
216 >     * @param v1 the other vector
217 >     */
218 >    inline void add( const Vector<Real, Dim>& v1 ) {
219 >      for (unsigned int i = 0; i < Dim; i++)
220 >        this->data_[i] += v1.data_[i];
221 >    }
222  
223 <            /**
224 <            * Sets the value of this vector to the sum of v1 and v2 (*this = v1 + v2).
225 <            * @param v1 the first vector
226 <            * @param v2 the second vector
227 <            */
228 <            inline void add( const Vector<Real, Dim>& v1, const Vector<Real, Dim>& v2 ) {
229 <                for (unsigned int i = 0; i < Dim; i++)
230 <                    this->data_[i] = v1.data_[i] + v2.data_[i];
231 <            }
223 >    /**
224 >     * Sets the value of this vector to the sum of v1 and v2 (*this = v1 + v2).
225 >     * @param v1 the first vector
226 >     * @param v2 the second vector
227 >     */
228 >    inline void add( const Vector<Real, Dim>& v1, const Vector<Real, Dim>& v2 ) {
229 >      for (unsigned int i = 0; i < Dim; i++)
230 >        this->data_[i] = v1.data_[i] + v2.data_[i];
231 >    }
232  
233 <            /**
234 <            * Sets the value of this vector to the difference  of itself and v1 (*this -= v1).
235 <            * @param v1 the other vector
236 <            */
237 <            inline void sub( const Vector<Real, Dim>& v1 ) {
238 <                for (unsigned int i = 0; i < Dim; i++)
239 <                    this->data_[i] -= v1.data_[i];
240 <            }
233 >    /**
234 >     * Sets the value of this vector to the difference  of itself and v1 (*this -= v1).
235 >     * @param v1 the other vector
236 >     */
237 >    inline void sub( const Vector<Real, Dim>& v1 ) {
238 >      for (unsigned int i = 0; i < Dim; i++)
239 >        this->data_[i] -= v1.data_[i];
240 >    }
241  
242 <            /**
243 <            * Sets the value of this vector to the difference of vector v1 and v2 (*this = v1 - v2).
244 <            * @param v1 the first vector
245 <            * @param v2 the second vector
246 <            */
247 <            inline void sub( const Vector<Real, Dim>& v1, const Vector  &v2 ){
248 <                for (unsigned int i = 0; i < Dim; i++)
249 <                    this->data_[i] = v1.data_[i] - v2.data_[i];
250 <            }
242 >    /**
243 >     * Sets the value of this vector to the difference of vector v1 and v2 (*this = v1 - v2).
244 >     * @param v1 the first vector
245 >     * @param v2 the second vector
246 >     */
247 >    inline void sub( const Vector<Real, Dim>& v1, const Vector  &v2 ){
248 >      for (unsigned int i = 0; i < Dim; i++)
249 >        this->data_[i] = v1.data_[i] - v2.data_[i];
250 >    }
251  
252 <            /**
253 <            * Sets the value of this vector to the scalar multiplication of itself (*this *= s).
254 <            * @param s the scalar value
255 <            */
256 <            inline void mul( Real s ) {
257 <                for (unsigned int i = 0; i < Dim; i++)
258 <                   this->data_[i] *= s;
259 <            }
252 >    /**
253 >     * Sets the value of this vector to the scalar multiplication of itself (*this *= s).
254 >     * @param s the scalar value
255 >     */
256 >    inline void mul( Real s ) {
257 >      for (unsigned int i = 0; i < Dim; i++)
258 >        this->data_[i] *= s;
259 >    }
260  
261 <            /**
262 <            * Sets the value of this vector to the scalar multiplication of vector v1  
263 <            * (*this = s * v1).
264 <            * @param v1 the vector            
265 <            * @param s the scalar value
266 <            */
267 <            inline void mul( const Vector<Real, Dim>& v1, Real s) {
268 <                for (unsigned int i = 0; i < Dim; i++)
269 <                    this->data_[i] = s * v1.data_[i];
270 <            }
261 >    /**
262 >     * Sets the value of this vector to the scalar multiplication of vector v1  
263 >     * (*this = s * v1).
264 >     * @param v1 the vector            
265 >     * @param s the scalar value
266 >     */
267 >    inline void mul( const Vector<Real, Dim>& v1, Real s) {
268 >      for (unsigned int i = 0; i < Dim; i++)
269 >        this->data_[i] = s * v1.data_[i];
270 >    }
271  
272 <            /**
273 <            * Sets the value of this vector to the scalar division of itself  (*this /= s ).
274 <            * @param s the scalar value
275 <            */            
276 <            inline void div( Real s) {
277 <                for (unsigned int i = 0; i < Dim; i++)            
278 <                    this->data_[i] /= s;
279 <            }
280 <
281 <            /**
282 <            * Sets the value of this vector to the scalar division of vector v1  (*this = v1 / s ).
283 <            * @param v1 the source vector
284 <            * @param s the scalar value
285 <            */                        
286 <            inline void div( const Vector<Real, Dim>& v1, Real s ) {
287 <                for (unsigned int i = 0; i < Dim; i++)
288 <                    this->data_[i] = v1.data_[i] / s;
289 <            }
272 >    /**
273 >     * Sets the value of this vector to the scalar division of itself  (*this /= s ).
274 >     * @param s the scalar value
275 >     */            
276 >    inline void div( Real s) {
277 >      for (unsigned int i = 0; i < Dim; i++)            
278 >        this->data_[i] /= s;
279 >    }
280  
281 <            /** @see #add */
282 <            inline Vector<Real, Dim>& operator +=( const Vector<Real, Dim>& v1 ) {
283 <                add(v1);
284 <                return *this;
285 <            }
281 >    /**
282 >     * Sets the value of this vector to the scalar division of vector v1  (*this = v1 / s ).
283 >     * @param v1 the source vector
284 >     * @param s the scalar value
285 >     */                        
286 >    inline void div( const Vector<Real, Dim>& v1, Real s ) {
287 >      for (unsigned int i = 0; i < Dim; i++)
288 >        this->data_[i] = v1.data_[i] / s;
289 >    }
290  
291 <            /** @see #sub */
292 <            inline Vector<Real, Dim>& operator -=( const Vector<Real, Dim>& v1 ) {
293 <                sub(v1);
294 <                return *this;
295 <            }
291 >    /** @see #add */
292 >    inline Vector<Real, Dim>& operator +=( const Vector<Real, Dim>& v1 ) {
293 >      add(v1);
294 >      return *this;
295 >    }
296  
297 <            /** @see #mul */
298 <            inline Vector<Real, Dim>& operator *=( Real s) {
299 <                mul(s);
300 <                return *this;
301 <            }
297 >    /** @see #sub */
298 >    inline Vector<Real, Dim>& operator -=( const Vector<Real, Dim>& v1 ) {
299 >      sub(v1);
300 >      return *this;
301 >    }
302  
303 <            /** @see #div */
304 <            inline Vector<Real, Dim>& operator /=( Real s ) {
305 <                div(s);
306 <                return *this;
307 <            }
303 >    /** @see #mul */
304 >    inline Vector<Real, Dim>& operator *=( Real s) {
305 >      mul(s);
306 >      return *this;
307 >    }
308  
309 <            /**
310 <             * Returns the length of this vector.
311 <             * @return the length of this vector
312 <             */
313 <             inline Real length() {
314 <                return sqrt(lengthSquare());  
315 <            }
309 >    /** @see #div */
310 >    inline Vector<Real, Dim>& operator /=( Real s ) {
311 >      div(s);
312 >      return *this;
313 >    }
314 >
315 >    /**
316 >     * Returns the length of this vector.
317 >     * @return the length of this vector
318 >     */
319 >    inline Real length() {
320 >      return sqrt(lengthSquare());  
321 >    }
322              
323 <            /**
324 <             * Returns the squared length of this vector.
325 <             * @return the squared length of this vector
326 <             */
327 <             inline Real lengthSquare() {
328 <                return dot(*this, *this);
329 <            }
323 >    /**
324 >     * Returns the squared length of this vector.
325 >     * @return the squared length of this vector
326 >     */
327 >    inline Real lengthSquare() {
328 >      return dot(*this, *this);
329 >    }
330              
331 <            /** Normalizes this vector in place */
332 <            inline void normalize() {
333 <                Real len;
331 >    /** Normalizes this vector in place */
332 >    inline void normalize() {
333 >      Real len;
334  
335 <                len = length();
335 >      len = length();
336                  
337 <                //if (len < oopse:epsilon)
338 <                //  throw();
337 >      //if (len < oopse:epsilon)
338 >      //  throw();
339                  
340 <                *this /= len;
341 <            }
340 >      *this /= len;
341 >    }
342  
343 <            /**
344 <             * Tests if this vector is normalized
345 <             * @return true if this vector is normalized, otherwise return false
346 <             */
347 <            inline bool isNormalized() {
348 <                return equal(lengthSquare(), 1.0);
349 <            }          
343 >    /**
344 >     * Tests if this vector is normalized
345 >     * @return true if this vector is normalized, otherwise return false
346 >     */
347 >    inline bool isNormalized() {
348 >      return equal(lengthSquare(), 1.0);
349 >    }          
350              
351 <        protected:
352 <            Real data_[Dim];
351 >  protected:
352 >    Real data_[Dim];
353          
354 <    };
354 >  };
355  
356 <    /** unary minus*/
357 <    template<typename Real, unsigned int Dim>    
358 <    inline Vector<Real, Dim> operator -(const Vector<Real, Dim>& v1){
359 <        Vector<Real, Dim> tmp(v1);
360 <        tmp.negate();
361 <        return tmp;
362 <    }
356 >  /** unary minus*/
357 >  template<typename Real, unsigned int Dim>    
358 >  inline Vector<Real, Dim> operator -(const Vector<Real, Dim>& v1){
359 >    Vector<Real, Dim> tmp(v1);
360 >    tmp.negate();
361 >    return tmp;
362 >  }
363  
364 <    /**
365 <     * Return the sum of two vectors  (v1 - v2).
366 <     * @return the sum of two vectors
367 <     * @param v1 the first vector
368 <     * @param v2 the second vector
369 <     */  
370 <    template<typename Real, unsigned int Dim>    
371 <    inline Vector<Real, Dim> operator +(const Vector<Real, Dim>& v1, const Vector<Real, Dim>& v2) {
372 <        Vector<Real, Dim> result;
364 >  /**
365 >   * Return the sum of two vectors  (v1 - v2).
366 >   * @return the sum of two vectors
367 >   * @param v1 the first vector
368 >   * @param v2 the second vector
369 >   */  
370 >  template<typename Real, unsigned int Dim>    
371 >  inline Vector<Real, Dim> operator +(const Vector<Real, Dim>& v1, const Vector<Real, Dim>& v2) {
372 >    Vector<Real, Dim> result;
373          
374 <        result.add(v1, v2);
375 <        return result;        
376 <    }
374 >    result.add(v1, v2);
375 >    return result;        
376 >  }
377  
378 <    /**
379 <     * Return the difference of two vectors  (v1 - v2).
380 <     * @return the difference of two vectors
381 <     * @param v1 the first vector
382 <     * @param v2 the second vector
383 <     */  
384 <    template<typename Real, unsigned int Dim>    
385 <    Vector<Real, Dim> operator -(const Vector<Real, Dim>& v1, const Vector<Real, Dim>& v2) {
386 <        Vector<Real, Dim> result;
387 <        result.sub(v1, v2);
388 <        return result;        
389 <    }
378 >  /**
379 >   * Return the difference of two vectors  (v1 - v2).
380 >   * @return the difference of two vectors
381 >   * @param v1 the first vector
382 >   * @param v2 the second vector
383 >   */  
384 >  template<typename Real, unsigned int Dim>    
385 >  Vector<Real, Dim> operator -(const Vector<Real, Dim>& v1, const Vector<Real, Dim>& v2) {
386 >    Vector<Real, Dim> result;
387 >    result.sub(v1, v2);
388 >    return result;        
389 >  }
390      
391 <    /**
392 <     * Returns the vaule of scalar multiplication of this vector v1 (v1 * r).
393 <     * @return  the vaule of scalar multiplication of this vector
394 <     * @param v1 the source vector
395 <     * @param s the scalar value
396 <     */
397 <    template<typename Real, unsigned int Dim>                
398 <    Vector<Real, Dim> operator * ( const Vector<Real, Dim>& v1, Real s) {      
399 <        Vector<Real, Dim> result;
400 <        result.mul(v1,s);
401 <        return result;          
402 <    }
391 >  /**
392 >   * Returns the vaule of scalar multiplication of this vector v1 (v1 * r).
393 >   * @return  the vaule of scalar multiplication of this vector
394 >   * @param v1 the source vector
395 >   * @param s the scalar value
396 >   */
397 >  template<typename Real, unsigned int Dim>                
398 >  Vector<Real, Dim> operator * ( const Vector<Real, Dim>& v1, Real s) {      
399 >    Vector<Real, Dim> result;
400 >    result.mul(v1,s);
401 >    return result;          
402 >  }
403      
404 <    /**
405 <     * Returns the vaule of scalar multiplication of this vector v1 (v1 * r).
406 <     * @return  the vaule of scalar multiplication of this vector
407 <     * @param s the scalar value
408 <     * @param v1 the source vector
409 <     */  
410 <    template<typename Real, unsigned int Dim>
411 <    Vector<Real, Dim> operator * ( Real s, const Vector<Real, Dim>& v1 ) {
412 <        Vector<Real, Dim> result;
413 <        result.mul(v1, s);
414 <        return result;          
415 <    }
404 >  /**
405 >   * Returns the vaule of scalar multiplication of this vector v1 (v1 * r).
406 >   * @return  the vaule of scalar multiplication of this vector
407 >   * @param s the scalar value
408 >   * @param v1 the source vector
409 >   */  
410 >  template<typename Real, unsigned int Dim>
411 >  Vector<Real, Dim> operator * ( Real s, const Vector<Real, Dim>& v1 ) {
412 >    Vector<Real, Dim> result;
413 >    result.mul(v1, s);
414 >    return result;          
415 >  }
416  
417 <    /**
418 <     * Returns the  value of division of a vector by a scalar.
419 <     * @return  the vaule of scalar division of this vector
420 <     * @param v1 the source vector
421 <     * @param s the scalar value
422 <     */
423 <    template<typename Real, unsigned int Dim>    
424 <    Vector<Real, Dim> operator / ( const Vector<Real, Dim>& v1, Real s) {      
425 <        Vector<Real, Dim> result;
426 <        result.div( v1,s);
427 <        return result;          
428 <    }
417 >  /**
418 >   * Returns the  value of division of a vector by a scalar.
419 >   * @return  the vaule of scalar division of this vector
420 >   * @param v1 the source vector
421 >   * @param s the scalar value
422 >   */
423 >  template<typename Real, unsigned int Dim>    
424 >  Vector<Real, Dim> operator / ( const Vector<Real, Dim>& v1, Real s) {      
425 >    Vector<Real, Dim> result;
426 >    result.div( v1,s);
427 >    return result;          
428 >  }
429      
430 <    /**
431 <     * Returns the dot product of two Vectors
432 <     * @param v1 first vector
433 <     * @param v2 second vector
434 <     * @return the dot product of v1 and v2
435 <     */
436 <    template<typename Real, unsigned int Dim>    
437 <    inline Real dot( const Vector<Real, Dim>& v1, const Vector<Real, Dim>& v2 ) {
438 <        Real tmp;
439 <        tmp = 0;
430 >  /**
431 >   * Returns the dot product of two Vectors
432 >   * @param v1 first vector
433 >   * @param v2 second vector
434 >   * @return the dot product of v1 and v2
435 >   */
436 >  template<typename Real, unsigned int Dim>    
437 >  inline Real dot( const Vector<Real, Dim>& v1, const Vector<Real, Dim>& v2 ) {
438 >    Real tmp;
439 >    tmp = 0;
440  
441 <        for (unsigned int i = 0; i < Dim; i++)
442 <            tmp += v1[i] * v2[i];
441 >    for (unsigned int i = 0; i < Dim; i++)
442 >      tmp += v1[i] * v2[i];
443  
444 <        return tmp;
445 <    }
444 >    return tmp;
445 >  }
446  
447 <    /**
448 <     * Returns the distance between  two Vectors
449 <     * @param v1 first vector
450 <     * @param v2 second vector
451 <     * @return the distance between v1 and v2
452 <     */
453 <    template<typename Real, unsigned int Dim>    
454 <    inline Real distance( const Vector<Real, Dim>& v1, const Vector<Real, Dim>& v2 ) {
455 <        Vector<Real, Dim> tempVector = v1 - v2;
456 <        return tempVector.length();
457 <    }
447 >  /**
448 >   * Returns the distance between  two Vectors
449 >   * @param v1 first vector
450 >   * @param v2 second vector
451 >   * @return the distance between v1 and v2
452 >   */  
453 >  template<typename Real, unsigned int Dim>    
454 >  inline Real distance( const Vector<Real, Dim>& v1, const Vector<Real, Dim>& v2 ) {
455 >    Vector<Real, Dim> tempVector = v1 - v2;
456 >    return tempVector.length();
457 >  }
458  
459 <    /**
460 <     * Returns the squared distance between  two Vectors
461 <     * @param v1 first vector
462 <     * @param v2 second vector
463 <     * @return the squared distance between v1 and v2
464 <     */
465 <    template<typename Real, unsigned int Dim>
466 <    inline Real distanceSquare( const Vector<Real, Dim>& v1, const Vector<Real, Dim>& v2 ) {
467 <        Vector<Real, Dim> tempVector = v1 - v2;
468 <        return tempVector.lengthSquare();
469 <    }
459 >  /**
460 >   * Returns the squared distance between  two Vectors
461 >   * @param v1 first vector
462 >   * @param v2 second vector
463 >   * @return the squared distance between v1 and v2
464 >   */
465 >  template<typename Real, unsigned int Dim>
466 >  inline Real distanceSquare( const Vector<Real, Dim>& v1, const Vector<Real, Dim>& v2 ) {
467 >    Vector<Real, Dim> tempVector = v1 - v2;
468 >    return tempVector.lengthSquare();
469 >  }
470  
471 <    /**
472 <     * Write to an output stream
473 <     */
474 <    template<typename Real, unsigned int Dim>
475 <    std::ostream &operator<< ( std::ostream& o, const Vector<Real, Dim>& v) {
471 >  /**
472 >   * Write to an output stream
473 >   */
474 >  template<typename Real, unsigned int Dim>
475 >  std::ostream &operator<< ( std::ostream& o, const Vector<Real, Dim>& v) {
476  
477 <        o << "[ ";
477 >    o << "[ ";
478          
479 <        for (unsigned int i = 0 ; i< Dim; i++) {
480 <            o << v[i];
479 >    for (unsigned int i = 0 ; i< Dim; i++) {
480 >      o << v[i];
481  
482 <            if (i  != Dim -1) {
483 <                o<< ", ";
484 <            }
485 <        }
486 <
487 <        o << " ]";
488 <        return o;        
482 >      if (i  != Dim -1) {
483 >        o<< ", ";
484 >      }
485      }
486 +
487 +    o << " ]";
488 +    return o;        
489 +  }
490      
491   }
492   #endif

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines