#include #include namespace kurator { namespace engine { double Point::magnitude() const { return std::sqrt(std::pow(x, 2) + std::pow(y, 2)); } double Point::distance(const Point& other) const { return std::sqrt(std::pow(other.x - x, 2) + std::pow(other.y - y, 2)); } double Point::angle() const { return std::atan2(y, x); // (+x, _) is 0 } Point Point::rotate(const double angle) const { return { x * std::cos(angle) - y * std::sin(angle), x * std::sin(angle) + y * std::cos(angle), }; } Point Point::scale(const double _scale) const { return {x * _scale, y * _scale}; } Point Point::normalized() const { return scale(1.0 / magnitude()); } Point Point::operator-(const Point& other) const { return subtract(other); } Point Point::operator+(const Point& other) const { return {x + other.x, y + other.y}; } Point Point::subtract(const Point& other) const { return {x - other.x, y - other.y}; } Point Point::subtract(const double _x, const double _y) const { return {x - _x, y - _y}; } } // namespace engine } // namespace kurator