12 #ifndef EMP_POINT_2D_H 13 #define EMP_POINT_2D_H 20 template <
typename TYPE=
double>
class Point2D {
26 constexpr
Point2D() : x(0.0), y(0.0) { ; }
28 constexpr
Point2D(TYPE _x, TYPE _y) : x(_x), y(_y) { ; }
30 : x(_in.x * ((double) new_magnitude) / ((double) _in.
Magnitude()))
31 , y(_in.y * ((double) new_magnitude) / ((double) _in.
Magnitude()))
36 constexpr
bool operator==(
const Point2D & _in)
const {
return (x == _in.x) && (y == _in.y); }
37 constexpr
bool operator!=(
const Point2D & _in)
const {
return (x != _in.x) || (y != _in.y); }
39 constexpr
inline TYPE
GetX()
const {
return x; }
40 constexpr
inline TYPE
GetY()
const {
return y; }
43 Point2D &
Set(TYPE _x, TYPE _y) { x=_x; y=_y;
return *
this; }
46 constexpr
double Magnitude()
const {
return sqrt( x*x + y*y ); }
47 constexpr
bool AtOrigin()
const {
return x == 0 && y == 0; }
48 constexpr
bool NonZero()
const {
return x != 0 || y != 0; }
68 Point2D &
Translate(TYPE shift_x, TYPE shift_y) { x += shift_x; y += shift_y;
return *
this; }
71 Point2D &
Scale(
double scale) { x *= scale; y *= scale;
return *
this; }
72 Point2D &
Scale(
double scale_x,
double scale_y) { x *= scale_x; y *= scale_y;
return *
this; }
91 const TYPE x_dist = x - _in.x;
92 const TYPE y_dist = y - _in.y;
93 return x_dist*x_dist + y_dist*y_dist;
104 template <
typename TYPE> std::ostream &
operator<<(std::ostream & os,
106 return os <<
"(" << point.
GetX() <<
"," << point.
GetY() <<
")";
constexpr Point2D operator-(const Point2D &_in) const
Definition: Point2D.h:58
constexpr bool NonZero() const
Definition: Point2D.h:48
constexpr Point2D GetRot90() const
Definition: Point2D.h:52
Point2D & operator+=(const Point2D &_in)
Definition: Point2D.h:77
constexpr TYPE GetX() const
Definition: Point2D.h:39
Point2D & operator-=(const Point2D &_in)
Definition: Point2D.h:78
constexpr Point2D GetOffset(TYPE off_x, TYPE off_y) const
Definition: Point2D.h:55
Point2D & NegateX()
Definition: Point2D.h:74
constexpr Point2D(const Point2D &_in)
Definition: Point2D.h:27
constexpr Point2D operator*(double mult) const
Definition: Point2D.h:59
constexpr double SquareMagnitude() const
Definition: Point2D.h:45
constexpr bool AtOrigin() const
Definition: Point2D.h:47
constexpr Point2D GetRot270() const
Definition: Point2D.h:54
Point2D & TranslateX(TYPE shift)
Definition: Point2D.h:69
Point2D & operator*=(double mult)
Definition: Point2D.h:79
constexpr Point2D(const Point2D &_in, TYPE new_magnitude)
Definition: Point2D.h:29
TYPE Distance(const Point2D &_in) const
Definition: Point2D.h:96
constexpr bool operator==(const Point2D &_in) const
Definition: Point2D.h:36
constexpr Point2D()
Definition: Point2D.h:26
Point2D & Scale(double scale)
Definition: Point2D.h:71
Point2D & Set(TYPE _x, TYPE _y)
Definition: Point2D.h:43
TYPE SquareDistance(const Point2D &_in) const
Definition: Point2D.h:90
constexpr Point2D GetMidpoint(const Point2D &p2) const
Definition: Point2D.h:51
std::ostream & operator<<(std::ostream &out, const emp::Ptr< T > &ptr)
Definition: Ptr.h:800
constexpr Point2D operator/(int div) const
Definition: Point2D.h:62
const Point2D & operator=(const Point2D &_in)
Definition: Point2D.h:35
Point2D & operator*=(int mult)
Definition: Point2D.h:81
Point2D & ToOrigin()
Definition: Point2D.h:73
constexpr Point2D Abs() const
Definition: Point2D.h:65
constexpr Point2D operator/(double div) const
Definition: Point2D.h:60
constexpr Point2D GetRot180() const
Definition: Point2D.h:53
constexpr bool operator!=(const Point2D &_in) const
Definition: Point2D.h:37
Point2D & Rot180()
Definition: Point2D.h:85
If we are in emscripten, make sure to include the header.
Definition: array.h:37
constexpr Point2D operator+(const Point2D &_in) const
Definition: Point2D.h:57
constexpr Point2D operator-() const
Definition: Point2D.h:63
Point2D & Rot270()
Definition: Point2D.h:86
Point2D & TranslateY(TYPE shift)
Definition: Point2D.h:70
Point2D & SetY(TYPE in_y)
Definition: Point2D.h:42
Point2D & operator/=(int val)
Definition: Point2D.h:82
constexpr Point2D(TYPE _x, TYPE _y)
Definition: Point2D.h:28
constexpr Point2D operator*(int mult) const
Definition: Point2D.h:61
Point2D & NegateY()
Definition: Point2D.h:75
constexpr TYPE GetY() const
Definition: Point2D.h:40
Point2D & Scale(double scale_x, double scale_y)
Definition: Point2D.h:72
Point2D & Translate(TYPE shift_x, TYPE shift_y)
Definition: Point2D.h:68
Point2D & operator/=(double val)
Definition: Point2D.h:80
Point2D & Rot90()
Definition: Point2D.h:84
constexpr double Magnitude() const
Definition: Point2D.h:46
Point2D & SetX(TYPE in_x)
Definition: Point2D.h:41