Skip to content
OE_utils.h 2.63 KiB
Newer Older
3dsman's avatar
3dsman committed
/*
 * 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 <math.h>

3dsman's avatar
3dsman committed
struct vector_2d {
    float x, y;
    vector_2d( float _x,  float _y) {
        x = _x;
        y = _y;
3dsman's avatar
3dsman committed
    }
    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)
	 */
3dsman's avatar
3dsman committed
    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);
3dsman's avatar
3dsman committed
    }
};


	/* 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};
	}

3dsman's avatar
3dsman committed
#endif // OE_UTILS_H