#include <math.h>
#include <GL/glut.h>

#define PI 3.14159265
#define DEG2RAD(x) (((x)*PI)/180.0)
#define RAD2DEG(x) (((x)*180.0)/PI)
#define BACKGROUND 0
#define OBJECT 255

class Color
{
public:
	float r,g,b,a;
	Color() { // Por defecto: negro
		r=g=b=0.0f;
		a=1.0f;
	}
	Color(float r, float g, float b, float a=1.0f) {
		if (r<0.0f) r=0.0f;
		else if (r>1.0f) r=1.0f;
		if (g<0.0f) g=0.0f;
		else if (g>1.0f) g=1.0f;
		if (b<0.0f) b=0.0f;
		else if (b>1.0f) b=1.0f;
		this->r=r; this->g=g; this->b=b;
		this->a=a;
	}
};

class Punto
{
public:
	float x,y,z,w;							//Coordenadas homogeneas

	Punto(float xx=0.0, float yy=0.0,		//Constructor
		  float zz=0.0, float ww=1.0); 
	Punto comoVector();						//Devuelve el punto como un vector
	float modulo();							//Calcula el modulo del vector
	float longitud();						//Calcula la longitud esferica del vector
	float latitud();						//Calcula la latitud esferica del vector

private:
	int esUnitario;							//esta normalizado
};

class Flecha
{
public:
	Color color;  // Color de la flecha
	Punto vector; // Dirección

	Flecha(void);
	Flecha (Punto dir, Color col);
	~Flecha(void);
	void dibujar();  // Dibuja la flecha en el origen
	void dibujar(const Punto n); //Dibuja la flecha desde el Punto n
};


typedef struct{
	int x;
	int y;
}posicion;