/*
 * Instituto Superior de Engenharia do Porto
 *
 * Estruturas de Informação
 *
 * 2000/2001
 *
 * ------------------------------------------
 *
 * classe para representar pontos num espaço bidimensional 
 *		
 * Ponto2D.cpp
 *
 */

#include <math.h>
#include <ostream.h>
#include "ponto2d.h"

Ponto2D::Ponto2D(int x /* = 0 */, int y /* = 0 */)
{
	setX(x);
	setY(y);
}

Ponto2D::Ponto2D(const Ponto2D& o)
{
	setX(o.getX());
	setY(o.getY());
}

double Ponto2D::getRo() const
{
	Ponto2D origem;
	return distancia(*this, origem);
}

double Ponto2D::getTeta() const
{
	return sin(getY());
}

Ponto2D& Ponto2D::operator=(const Ponto2D& o)
{
	setX(o.getX());
	setY(o.getY());
	return *this;
}

Ponto2D& Ponto2D::operator-=(const Ponto2D& o)
{
	m_iX -= o.getX();
	m_iY -= o.getY();
	return *this;
}

Ponto2D& Ponto2D::operator+=(const Ponto2D& o)
{
	m_iX += o.getX();
	m_iY += o.getY();
	return *this;
}

Ponto2D operator+(const Ponto2D& a, const Ponto2D& b)
{
	Ponto2D c(a.getX()+b.getX(), a.getY()+b.getY());
	return c;
}

Ponto2D operator-(const Ponto2D& a, const Ponto2D& b)
{
	Ponto2D c(a.getX()-b.getX(), a.getY()-b.getY());
	return c;
}

bool operator==(const Ponto2D& a, const Ponto2D& b)
{
	if (a.getX() == b.getX() && a.getY() == b.getY())
		return true;
	else
		return false;
}

double distancia(const Ponto2D& a, const Ponto2D& b)
{
	double d1 = a.getX() - b.getX();
	double d2 = a.getY() - b.getY();
	double d = sqrt(d1*d1 + d2*d2);
	return d;
}

ostream& operator<<(ostream& output, const Ponto2D& obj)
{
	output << "(" << obj.getX() << ", " << obj.getY() << ")";
	return output;
}
