///////////////////////////////////////////////////////////////////////////////
//  S2D.cpp

#include <math.h>
#include "3DDefine.h"
#include "S2D.h"
#include "S2DI.h"

S2D::S2D() :
	x(0.0f),
	y(0.0f)
{
}

S2D::S2D(float x_, float y_) :
	x(x_),
	y(y_)
{
}

S2D::~S2D()
{
}

S2D S2D::operator+(const S2D& Obj) const
{
	return S2D(x + Obj.x, y + Obj.y);
}

S2D S2D::operator-(const S2D& Obj) const
{
	return S2D(x - Obj.x, y - Obj.y);
}

S2D S2D::operator*(const S2D& Obj) const
{
	return S2D(x * Obj.x, y * Obj.y);
}

S2D S2D::operator*(float f) const
{
	return S2D(x * f, y * f);
}

S2D S2D::operator/(float f) const
{
	return S2D(x / f, y / f);
}

S2D& S2D::operator+=(const S2D& Obj)
{
	x += Obj.x;
	y += Obj.y;

	return *this;
}

bool S2D::operator==(const S2D& Obj) const
{
	return ((x == Obj.x) && (y == Obj.y));
}

bool S2D::operator!=(const S2D& Obj) const
{
	return ((x != Obj.x) || (y != Obj.y));
}

math3d::S2DI S2D::GetS2DI() const
{
	return math3d::S2DI(static_cast<int>(x), static_cast<int>(y));
}

void S2D::Normalize()
{
	float fDenom = sqrtf(x * x + y * y);
	if (fDenom != 0.0f) {
		fDenom = 1.0f / fDenom;
		x *= fDenom;
		y *= fDenom;
	}
}

float S2D::Distance(const S2D& pos1, const S2D& pos2)
{
	return sqrtf(POW2(pos1.x - pos2.x) + POW2(pos1.y - pos2.y));
}

