| 85 | 
  | 
                 | 
| 86 | 
  | 
                return *this; | 
| 87 | 
  | 
            } | 
| 88 | 
+ | 
 | 
| 89 | 
+ | 
            template<typename T> | 
| 90 | 
+ | 
            inline Vector(const T& s){ | 
| 91 | 
+ | 
                for (unsigned int i = 0; i < Dim; i++) | 
| 92 | 
+ | 
                    data_[i] = s; | 
| 93 | 
+ | 
            } | 
| 94 | 
  | 
             | 
| 95 | 
  | 
            /** Constructs and initializes a Vector from an array */             | 
| 96 | 
  | 
            inline Vector( double* v) { | 
| 165 | 
  | 
              | 
| 166 | 
  | 
            /** Negates the value of this vector in place. */            | 
| 167 | 
  | 
            inline void negate() { | 
| 168 | 
< | 
                data_[0] = -data_[0]; | 
| 169 | 
< | 
                data_[1] = -data_[1]; | 
| 164 | 
< | 
                data_[2] = -data_[2]; | 
| 168 | 
> | 
                for (unsigned int i = 0; i < Dim; i++) | 
| 169 | 
> | 
                    data_[i] = -data_[i]; | 
| 170 | 
  | 
            } | 
| 171 | 
  | 
 | 
| 172 | 
  | 
            /** | 
| 229 | 
  | 
            /** | 
| 230 | 
  | 
            * Sets the value of this vector to the scalar multiplication of vector v1   | 
| 231 | 
  | 
            * (*this = s * v1). | 
| 232 | 
+ | 
            * @param v1 the vector             | 
| 233 | 
  | 
            * @param s the scalar value | 
| 228 | 
– | 
            * @param v1 the vector | 
| 234 | 
  | 
            */ | 
| 235 | 
< | 
            inline void mul( double s, const Vector<Real, Dim>& v1 ) { | 
| 235 | 
> | 
            inline void mul( const Vector<Real, Dim>& v1, double s) { | 
| 236 | 
  | 
                for (unsigned int i = 0; i < Dim; i++) | 
| 237 | 
  | 
                    data_[i] = s * v1.data_[i]; | 
| 238 | 
  | 
            } | 
| 301 | 
  | 
                double len; | 
| 302 | 
  | 
 | 
| 303 | 
  | 
                len = length(); | 
| 304 | 
+ | 
                 | 
| 305 | 
+ | 
                //if (len < oopse:epsilon) | 
| 306 | 
+ | 
                //  throw(); | 
| 307 | 
+ | 
                 | 
| 308 | 
  | 
                *this /= len; | 
| 309 | 
  | 
            } | 
| 310 | 
  | 
 | 
| 318 | 
  | 
            }            | 
| 319 | 
  | 
             | 
| 320 | 
  | 
        protected: | 
| 321 | 
< | 
            double data_[3]; | 
| 321 | 
> | 
            double data_[Dim]; | 
| 322 | 
  | 
         | 
| 323 | 
  | 
    }; | 
| 324 | 
  | 
 | 
| 325 | 
  | 
    /** unary minus*/ | 
| 326 | 
  | 
    template<typename Real, unsigned int Dim>     | 
| 327 | 
  | 
    inline Vector<Real, Dim> operator -(const Vector<Real, Dim>& v1){ | 
| 328 | 
< | 
        Vector tmp(v1); | 
| 329 | 
< | 
        return tmp.negate(); | 
| 328 | 
> | 
        Vector<Real, Dim> tmp(v1); | 
| 329 | 
> | 
        tmp.negate(); | 
| 330 | 
> | 
        return tmp; | 
| 331 | 
  | 
    } | 
| 332 | 
  | 
 | 
| 333 | 
  | 
    /** | 
| 366 | 
  | 
    template<typename Real, unsigned int Dim>                  | 
| 367 | 
  | 
    Vector<Real, Dim> operator * ( const Vector<Real, Dim>& v1, double s) {        | 
| 368 | 
  | 
        Vector<Real, Dim> result; | 
| 369 | 
< | 
        result.mul(s, v1); | 
| 369 | 
> | 
        result.mul(v1,s); | 
| 370 | 
  | 
        return result;            | 
| 371 | 
  | 
    } | 
| 372 | 
  | 
     | 
| 379 | 
  | 
    template<typename Real, unsigned int Dim> | 
| 380 | 
  | 
    Vector<Real, Dim> operator * ( double s, const Vector<Real, Dim>& v1 ) { | 
| 381 | 
  | 
        Vector<Real, Dim> result; | 
| 382 | 
< | 
        result.mul(s, v1); | 
| 382 | 
> | 
        result.mul(v1, s); | 
| 383 | 
  | 
        return result;            | 
| 384 | 
  | 
    } | 
| 385 | 
  | 
 | 
| 397 | 
  | 
    } | 
| 398 | 
  | 
     | 
| 399 | 
  | 
    /** | 
| 390 | 
– | 
     * Returns the  value of division of a vector by a scalar.  | 
| 391 | 
– | 
     * @return  the vaule of scalar division of this vector | 
| 392 | 
– | 
     * @param s the scalar value | 
| 393 | 
– | 
     * @param v1 the source vector | 
| 394 | 
– | 
     */ | 
| 395 | 
– | 
    template<typename Real, unsigned int Dim>         | 
| 396 | 
– | 
    inline Vector<Real, Dim> operator /( double s, const Vector<Real, Dim>& v1 ) { | 
| 397 | 
– | 
        Vector<Real, Dim> result; | 
| 398 | 
– | 
        result.div( v1,s); | 
| 399 | 
– | 
        return result;            | 
| 400 | 
– | 
    } | 
| 401 | 
– | 
 | 
| 402 | 
– | 
    /** fuzzy comparson */ | 
| 403 | 
– | 
    template<typename Real, unsigned int Dim>         | 
| 404 | 
– | 
    inline bool epsilonEqual( const Vector<Real, Dim>& v1, const Vector<Real, Dim>& v2 ) { | 
| 405 | 
– | 
 | 
| 406 | 
– | 
    } | 
| 407 | 
– | 
 | 
| 408 | 
– | 
     | 
| 409 | 
– | 
    /** | 
| 400 | 
  | 
     * Returns the dot product of two Vectors | 
| 401 | 
  | 
     * @param v1 first vector | 
| 402 | 
  | 
     * @param v2 second vector |