| 35 |  |  | 
| 36 |  | #include <cassert> | 
| 37 |  | #include <cmath> | 
| 38 | + | #include <iostream> | 
| 39 |  |  | 
| 40 |  | namespace oopse { | 
| 41 |  |  | 
| 43 |  | * @class Vector Vector.hpp "math/Vector.hpp" | 
| 44 |  | * @brief Fix length vector class | 
| 45 |  | */ | 
| 46 | < | template<typename Real, int Dim> | 
| 46 | > | template<typename Real, unsigned int Dim> | 
| 47 |  | class Vector{ | 
| 48 |  | public: | 
| 49 |  |  | 
| 210 |  | } | 
| 211 |  |  | 
| 212 |  | /** @see #add */ | 
| 213 | < | inline Vector<Real, Dim> operator +=( const Vector<Real, Dim>& v1 ) { | 
| 213 | > | inline Vector<Real, Dim>& operator +=( const Vector<Real, Dim>& v1 ) { | 
| 214 |  | add(v1); | 
| 215 |  | return *this; | 
| 216 |  | } | 
| 217 |  |  | 
| 218 |  | /** @see #sub */ | 
| 219 | < | inline Vector<Real, Dim> operator -=( const Vector<Real, Dim>& v1 ) { | 
| 219 | > | inline Vector<Real, Dim>& operator -=( const Vector<Real, Dim>& v1 ) { | 
| 220 |  | sub(v1); | 
| 221 |  | return *this; | 
| 222 |  | } | 
| 223 |  |  | 
| 224 |  | /** @see #mul */ | 
| 225 | < | inline Vector<Real, Dim> operator *=( double s) { | 
| 225 | > | inline Vector<Real, Dim>& operator *=( double s) { | 
| 226 |  | mul(s); | 
| 227 |  | return *this; | 
| 228 |  | } | 
| 229 |  |  | 
| 230 |  | /** @see #div */ | 
| 231 | < | inline Vector<Real, Dim> operator /=( double s ) { | 
| 231 | > | inline Vector<Real, Dim>& operator /=( double s ) { | 
| 232 |  | div(s); | 
| 233 |  | return *this; | 
| 234 |  | } | 
| 263 |  | }; | 
| 264 |  |  | 
| 265 |  | /** unary minus*/ | 
| 266 | < | template<typename Real, int Dim> | 
| 266 | > | template<typename Real, unsigned int Dim> | 
| 267 |  | inline Vector<Real, Dim> operator -(const Vector<Real, Dim>& v1){ | 
| 268 |  | Vector tmp(v1); | 
| 269 |  | return tmp.negate(); | 
| 275 |  | * @param v1 the first vector | 
| 276 |  | * @param v2 the second vector | 
| 277 |  | */ | 
| 278 | < | template<typename Real, int Dim> | 
| 278 | > | template<typename Real, unsigned int Dim> | 
| 279 |  | inline Vector<Real, Dim> operator +(const Vector<Real, Dim>& v1, const Vector<Real, Dim>& v2) { | 
| 280 |  | Vector<Real, Dim> result; | 
| 281 |  |  | 
| 289 |  | * @param v1 the first vector | 
| 290 |  | * @param v2 the second vector | 
| 291 |  | */ | 
| 292 | < | template<typename Real, int Dim> | 
| 292 | > | template<typename Real, unsigned int Dim> | 
| 293 |  | Vector<Real, Dim> operator -(const Vector<Real, Dim>& v1, const Vector<Real, Dim>& v2) { | 
| 294 |  | Vector<Real, Dim> result; | 
| 295 |  | result.sub(v1, v2); | 
| 302 |  | * @param v1 the source vector | 
| 303 |  | * @param s the scalar value | 
| 304 |  | */ | 
| 305 | < | template<typename Real, int Dim> | 
| 305 | > | template<typename Real, unsigned int Dim> | 
| 306 |  | Vector<Real, Dim> operator * ( const Vector<Real, Dim>& v1, double s) { | 
| 307 |  | Vector<Real, Dim> result; | 
| 308 |  | result.mul(s, v1); | 
| 315 |  | * @param s the scalar value | 
| 316 |  | * @param v1 the source vector | 
| 317 |  | */ | 
| 318 | < | template<typename Real, int Dim> | 
| 318 | > | template<typename Real, unsigned int Dim> | 
| 319 |  | Vector<Real, Dim> operator * ( double s, const Vector<Real, Dim>& v1 ) { | 
| 320 |  | Vector<Real, Dim> result; | 
| 321 |  | result.mul(s, v1); | 
| 328 |  | * @param v1 the source vector | 
| 329 |  | * @param s the scalar value | 
| 330 |  | */ | 
| 331 | < | template<typename Real, int Dim> | 
| 331 | > | template<typename Real, unsigned int Dim> | 
| 332 |  | Vector<Real, Dim> operator / ( const Vector<Real, Dim>& v1, double s) { | 
| 333 |  | Vector<Real, Dim> result; | 
| 334 |  | result.div( v1,s); | 
| 341 |  | * @param s the scalar value | 
| 342 |  | * @param v1 the source vector | 
| 343 |  | */ | 
| 344 | < | template<typename Real, int Dim> | 
| 344 | > | template<typename Real, unsigned int Dim> | 
| 345 |  | inline Vector<Real, Dim> operator /( double s, const Vector<Real, Dim>& v1 ) { | 
| 346 |  | Vector<Real, Dim> result; | 
| 347 |  | result.div( v1,s); | 
| 349 |  | } | 
| 350 |  |  | 
| 351 |  | /** fuzzy comparson */ | 
| 352 | < | template<typename Real, int Dim> | 
| 352 | > | template<typename Real, unsigned int Dim> | 
| 353 |  | inline bool epsilonEqual( const Vector<Real, Dim>& v1, const Vector<Real, Dim>& v2 ) { | 
| 354 |  |  | 
| 355 |  | } | 
| 361 |  | * @param v2 second vector | 
| 362 |  | * @return the dot product of v1 and v2 | 
| 363 |  | */ | 
| 364 | < | template<typename Real, int Dim> | 
| 364 | > | template<typename Real, unsigned int Dim> | 
| 365 |  | inline Real dot( const Vector<Real, Dim>& v1, const Vector<Real, Dim>& v2 ) { | 
| 366 |  | Real tmp; | 
| 367 |  | tmp = 0; | 
| 378 |  | * @param v2 second vector | 
| 379 |  | * @return the distance between v1 and v2 | 
| 380 |  | */ | 
| 381 | < | template<typename Real, int Dim> | 
| 381 | > | template<typename Real, unsigned int Dim> | 
| 382 |  | inline Real distance( const Vector<Real, Dim>& v1, const Vector<Real, Dim>& v2 ) { | 
| 383 |  | Vector<Real, Dim> tempVector = v1 - v2; | 
| 384 |  | return tempVector.length(); | 
| 390 |  | * @param v2 second vector | 
| 391 |  | * @return the squared distance between v1 and v2 | 
| 392 |  | */ | 
| 393 | < | template<typename Real, int Dim> | 
| 393 | > | template<typename Real, unsigned int Dim> | 
| 394 |  | inline Real distanceSquare( const Vector<Real, Dim>& v1, const Vector<Real, Dim>& v2 ) { | 
| 395 |  | Vector<Real, Dim> tempVector = v1 - v2; | 
| 396 |  | return tempVector.lengthSquare(); | 
| 399 |  | /** | 
| 400 |  | * Write to an output stream | 
| 401 |  | */ | 
| 402 | < | template<typename Real, int Dim> | 
| 402 | > | template<typename Real, unsigned int Dim> | 
| 403 |  | std::ostream &operator<< ( std::ostream& o, const Vector<Real, Dim>& v1 ) { | 
| 404 |  |  | 
| 405 |  | return o; |