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

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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines