Vector2i.cpp
//------------------------------------------------------------------------------
/// @file
/// @author ハル研究所プログラミングコンテスト実行委員会
///
/// @copyright Copyright (c) 2018 HAL Laboratory, Inc.
/// @attention このファイルの利用は、同梱のREADMEにある
/// 利用条件に従ってください。
//------------------------------------------------------------------------------
#pragma once
#include "Vector2i.hpp"
//------------------------------------------------------------------------------
#include "Math.hpp"
//------------------------------------------------------------------------------
namespace hpc {
//------------------------------------------------------------------------------
Vector2i Vector2i::Zero()
{
return Vector2i();
}
//------------------------------------------------------------------------------
Vector2i::Vector2i()
: x()
, y()
{
}
//------------------------------------------------------------------------------
Vector2i::Vector2i(int aX, int aY)
: x(aX)
, y(aY)
{
}
//------------------------------------------------------------------------------
bool Vector2i::operator==(const Vector2i& aRhs) const
{
return x == aRhs.x && y == aRhs.y;
}
//------------------------------------------------------------------------------
bool Vector2i::isZeroStrict() const
{
return x == 0 && y == 0;
}
//------------------------------------------------------------------------------
bool Vector2i::equals(const Vector2i& aVec) const
{
return x == aVec.x && y == aVec.y;
}
//------------------------------------------------------------------------------
Vector2i Vector2i::operator-() const
{
return Vector2i(-x, -y);
}
//------------------------------------------------------------------------------
Vector2i& Vector2i::operator+=(const Vector2i& aRhs)
{
x += aRhs.x;
y += aRhs.y;
return *this;
}
//------------------------------------------------------------------------------
Vector2i& Vector2i::operator-=(const Vector2i& aRhs)
{
x -= aRhs.x;
y -= aRhs.y;
return *this;
}
//------------------------------------------------------------------------------
Vector2i& Vector2i::operator*=(int aRhs)
{
x *= aRhs;
y *= aRhs;
return *this;
}
//------------------------------------------------------------------------------
Vector2i Vector2i::operator+(const Vector2i& aRhs) const
{
Vector2i v(*this);
v += aRhs;
return v;
}
//------------------------------------------------------------------------------
Vector2i Vector2i::operator-(const Vector2i& aRhs) const
{
Vector2i v(*this);
v -= aRhs;
return v;
}
//------------------------------------------------------------------------------
Vector2i Vector2i::operator*(int aRhs) const
{
Vector2i v(*this);
v *= aRhs;
return v;
}
//------------------------------------------------------------------------------
Vector2i operator*(int aLhs, const Vector2i& aRhs)
{
return aRhs * aLhs;
}
//------------------------------------------------------------------------------
Vector2i Vector2i::min(const Vector2i& aVal) const
{
return Vector2i(
Math::Min(x, aVal.x),
Math::Min(y, aVal.y)
);
}
//------------------------------------------------------------------------------
Vector2i Vector2i::max(const Vector2i& aVal) const
{
return Vector2i(
Math::Max(x, aVal.x),
Math::Max(y, aVal.y)
);
}
//------------------------------------------------------------------------------
float Vector2i::length() const
{
return Math::Sqrt(squareLength());
}
//------------------------------------------------------------------------------
float Vector2i::squareLength() const
{
return static_cast<float>(x * x + y * y);
}
//------------------------------------------------------------------------------
float Vector2i::dist(const Vector2i& aPoint) const
{
return Math::Sqrt(squareDist(aPoint));
}
//------------------------------------------------------------------------------
float Vector2i::squareDist(const Vector2i& aPoint) const
{
const float x2 = static_cast<float>((aPoint.x - x) * (aPoint.x - x));
const float y2 = static_cast<float>((aPoint.y - y) * (aPoint.y - y));
return x2 + y2;
}
} // namespace
// EOF