| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 | package point2dimport (	"fmt"	"math")// A Point 2Dtype Point struct {	X int // X Axis (Horizontal)	Y int // Y Axis (Vertical)}// Creates a new point at (0, 0)func NewPoint() *Point {	return &Point{}}// Creates a new point given 1-2 integers (more integers are ignored)func AsPoint(to ...int) *Point {	var p *Point = &Point{}	if len(to) == 1 {		p.X = to[0]		p.Y = to[0]	} else if len(to) >= 2 {		p.X = to[0]		p.Y = to[1]	}	return p}// Assignment by 1-2 integers (more integers are ignored)func (p *Point) Set(to ...int) *Point {	if len(to) == 1 {		p.X = to[0]		p.Y = to[0]	} else if len(to) >= 2 {		p.X = to[0]		p.Y = to[1]	}	return p}// Assignment to another Point's locationfunc (p *Point) SetTo(o *Point) *Point {	p.X = o.X	p.Y = o.Y	return p}// Translate by 1-2 integers (more integers are ignored)func (p *Point) Move(by ...int) *Point {	if len(by) == 1 {		p.X += by[0]		p.Y += by[0]	} else if len(by) >= 2 {		p.X += by[0]		p.Y += by[1]	}	return p}// Translate by another Point's locationfunc (p *Point) MoveBy(o *Point) *Point {	p.X += o.X	p.Y += o.Y	return p}// Assigns this Point to (0, 0)func (p *Point) Zero() *Point {	p.X = 0	p.Y = 0	return p}// Flips both the X and Y axis's signsfunc (p *Point) Negate() *Point {	p.X = -p.X	p.Y = -p.Y	return p}// Makes both X and Y axis's positivefunc (p *Point) Abs() *Point {	if p.X < 0 {		p.X = -p.X	}	if p.Y < 0 {		p.Y = -p.Y	}	return p}// Makes a copy of the Point's locationfunc (p *Point) Copy() *Point {	return &Point{p.X, p.Y}}// Outputs the Point as "X Y"func (p *Point) String() string {	return fmt.Sprintf("%d %d", p.X, p.Y)}// Compares if the Point is (0, 0)func (p *Point) IsZero() bool {	return p.X == 0 && p.Y == 0}// Compares if the Point's X is the same as given X axisfunc (p *Point) IsX(x int) bool {	return p.X == x}// Compares if the Point's Y is the same as given Y axisfunc (p *Point) IsY(y int) bool {	return p.Y == y}// Compares if the Point is equal to the 1-2 integers (more integers are ignored)func (p *Point) Equal(to ...int) bool {	if len(to) == 1 {		return p.X == to[0] && p.Y == to[0]	} else if len(to) >= 2 {		return p.X == to[0] && p.Y == to[1]	}	return false}// Compares the Point to another Pointfunc (p *Point) EqualTo(o *Point) bool {	return p.X == o.X && p.Y == o.Y}// Compares the Point against 1-2 integers (more integers are ignored)func (p *Point) Less(than ...int) bool {	if len(than) == 1 {		return p.X <= than[0] && p.Y <= than[0]	} else if len(than) >= 2 {		return p.X <= than[0] && p.Y <= than[1]	}	return false}// Compares the Point against another Pointfunc (p *Point) LessThan(o *Point) bool {	return p.X <= o.X && p.Y <= o.Y}// Compares the Point against 1-2 integers (more integers are ignored)func (p *Point) Greater(than ...int) bool {	if len(than) == 1 {		return p.X >= than[0] && p.Y >= than[0]	} else if len(than) >= 2 {		return p.X >= than[0] && p.Y >= than[1]	}	return false}// Compares the Point to another Pointfunc (p *Point) GreaterThan(o *Point) bool {	return p.X >= o.X && p.Y >= o.Y}// Compares the Point to see if it's within the 2 other Points//// Supports if you gave the parameters backwardsfunc (p *Point) Within(topLeft, botRight *Point) bool {	if p.EqualTo(topLeft) || p.EqualTo(botRight) {		return true	}	if topLeft.EqualTo(botRight) {		// We didn't match either and they both are the same		return false	}	if topLeft.GreaterThan(botRight) {		topLeft, botRight = botRight, topLeft	}	return (p.X >= topLeft.X && p.X <= botRight.X) && (p.Y >= topLeft.Y && p.Y <= botRight.Y)}// The distance from the Point to the assumed locationfunc (p *Point) Distance(x, y int) int {	a := float64(p.X - x)	b := float64(p.Y - y)	return int(math.Max(math.Abs(a), math.Abs(b)))}// The distance from the Point to another Pointfunc (p *Point) DistanceTo(o *Point) int {	return p.Distance(o.X, o.Y)}
 |