/* * Copyright (c) 2015 Tricoire Sebastien 3dsman@free.fr * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. * */ #ifndef OE_UTILS_H #define OE_UTILS_H #include struct vector_2d { float x, y; vector_2d( float _x, float _y) { x = _x; y = _y; } vector_2d() {} inline vector_2d operator *(const vector_2d& pt) const{ return {pt.x*x,pt.y*y}; } inline vector_2d operator *( const float val) { return {val*x,val*y}; } inline vector_2d operator /(const vector_2d& pt) const{ return {pt.x/x,pt.y/y}; } inline vector_2d operator /( const float val) { return {val/x,val/y}; } inline vector_2d operator +(const vector_2d pt) const{ return {pt.x+x,pt.y+y}; } inline vector_2d operator +(const float val) const{ return {val+x,val+y}; } inline vector_2d operator -(const vector_2d pt) const{ return {x-pt.x,y-pt.y}; } inline vector_2d operator -(const float val) const{ return {x-val,y-val}; } /** \brief normalise the vector (his length become 1) */ void normalize() { float length = 1/len() ; x *= length; y *= length; } /** \brief parse the xml file to load params * \return true the length of the vector (always >=0) */ float len() { return sqrt(x*x+y*y); } }; /* inline vector_2d operator *( const vector_2d vect, const float val) { return {val*vect.x,val*vect.y}; }*/ inline vector_2d operator *( const float val, const vector_2d vect) { return {val*vect.x,val*vect.y}; } /*inline vector_2d operator -( const vector_2d vect1, const vector_2d vect2) { return {vect1.x-vect2.x,vect1.y-vect2.y}; }*/ inline vector_2d operator -( const float val, const vector_2d vect) { return {val-vect.x,val-vect.y}; } inline vector_2d operator -( const vector_2d vect, const float val) { return {vect.x-val , vect.y-val}; } #endif // OE_UTILS_H