--- /dev/null
+package com.hexidec.util;
+
+public class Cartesian
+{
+ private int x;
+ private int y;
+
+ public Cartesian(int x, int y)
+ {
+ this.x = x;
+ this.y = y;
+ }
+
+ public Cartesian(Cartesian cartesian)
+ {
+ this.x = cartesian.getX();
+ this.y = cartesian.getY();
+ }
+
+ public Cartesian()
+ {
+ this(0, 0);
+ }
+
+ public int getX() { return x; }
+ public int getY() { return y; }
+
+ public void setX(int i) { x = i; }
+ public void setY(int i) { y = i; }
+
+ public void mirror(Cartesian cpSource)
+ {
+ this.setX(cpSource.getX());
+ this.setY(cpSource.getY());
+ }
+
+ public void add(Cartesian cpAdd)
+ {
+ this.setX(this.getX() + cpAdd.getX());
+ this.setY(this.getY() + cpAdd.getY());
+ }
+
+ public void subtract(Cartesian cpSub)
+ {
+ this.setX(this.getX() - cpSub.getX());
+ this.setY(this.getY() - cpSub.getY());
+ }
+
+ public void scale(int magnitude)
+ {
+ this.setX(this.getX() * magnitude);
+ this.setY(this.getY() * magnitude);
+ }
+
+ public Cartesian getScaledInstance(int magnitude)
+ {
+ Cartesian cpNew = this.dupe();
+ cpNew.scale(magnitude);
+ return cpNew;
+ }
+
+ public Cartesian getScaledInstance(Cartesian cpMagnitude)
+ {
+ Cartesian cpNew = this.dupe();
+ cpNew.setX(cpNew.getX() * cpMagnitude.getX());
+ cpNew.setY(cpNew.getY() * cpMagnitude.getY());
+ return cpNew;
+ }
+
+ public Cartesian addToLimit(Cartesian cpBase, Cartesian cpMin, Cartesian cpMax)
+ {
+ Cartesian cpNew = this.dupe();
+ cpNew.add(cpBase);
+ if(cpNew.getX() < cpMin.getX()) { cpNew.setX(cpMin.getX()); }
+ if(cpNew.getY() < cpMin.getY()) { cpNew.setY(cpMin.getY()); }
+ if(cpNew.getX() > cpMax.getX()) { cpNew.setX(cpMax.getX()); }
+ if(cpNew.getY() > cpMax.getY()) { cpNew.setY(cpMax.getY()); }
+ return cpNew;
+ }
+
+ public Cartesian translate(Cartesian cpOffset, boolean unknown)
+ {
+ Cartesian cpNew = this.dupe();
+ cpNew.add(cpOffset);
+ return cpNew;
+ }
+
+ public Cartesian translate(Cartesian cpOffset)
+ {
+ return translate(cpOffset, false);
+ }
+
+ public double distance(Cartesian cpTarget)
+ {
+ // Formula -> SQRT(SQR(x2 - x1) + SQR(y2 - y1))
+ int xDiff = cpTarget.getX() - this.getX();
+ int yDiff = cpTarget.getY() - this.getY();
+ return Math.sqrt((xDiff * xDiff) + (yDiff * yDiff));
+ }
+
+ public Cartesian midpoint(Cartesian cpTarget)
+ {
+ // Formula -> (x1 + x2) / 2, (y1 + y2) / 2
+ int xMid = (this.getX() + cpTarget.getX()) / 2;
+ int yMid = (this.getY() + cpTarget.getY()) / 2;
+ return new Cartesian(xMid, yMid);
+ }
+
+ public double slope(Cartesian cpTarget)
+ {
+ // Formula -> (y1 - y2) / (x1 - x2)
+ int xDiff = this.getX() - cpTarget.getX();
+ int yDiff = this.getY() - cpTarget.getY();
+ return yDiff / xDiff;
+ }
+
+ public Cartesian dupe()
+ {
+ return new Cartesian(this);
+ }
+
+ public boolean equals(Cartesian cpCompare)
+ {
+ return ((this.getX() == cpCompare.getX()) && (this.getY() == cpCompare.getY()));
+ }
+
+ public String toString()
+ {
+ return "(" + this.getX() + "," + this.getY() + ")";
+ }
+
+ public String toKey()
+ {
+ return "X" + this.getX() + "Y" + this.getY();
+ }
+
+}
\ No newline at end of file