-
Notifications
You must be signed in to change notification settings - Fork 0
/
Point.java
76 lines (63 loc) · 1.82 KB
/
Point.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/**
* A wrapper class of two doubles representing a 2D Point.
*
* @param x the double representing the x position.
* @param y the double representing the y position.
*/
public class Point {
private final double x;
private final double y;
public Point(double x, double y) {
this.x = x;
this.y = y;
}
@Override
public String toString() {
return String.format("Point(%f, %f)", this.x, this.y);
}
public static Point origin() {
return new Point(0.0, 0.0);
}
public double getX() {
return this.x;
}
public double getY() {
return this.y;
}
public Point translateCoords(double x, double y) {
return new Point(this.x + x, this.y + y);
}
public Point translateAngle(double angle, double dist) {
return this.translateCoords(dist * Math.cos(angle),
dist * Math.sin(angle));
}
/**
* returns the angle of a vector drawn from
* the origin to the point in radians.
*/
public double angle() {
double angle = Math.atan2(this.y, this.x);
if (angle < 0) {
angle += 2 * Math.PI;
}
return angle;
}
public double angleBetween(Point other) {
return other.angle() - this.angle();
}
public double distanceBetween(Point other) {
return Math.sqrt(Math.pow(other.y - this.y, 2) +
Math.pow(other.x - this.x, 2));
}
public double distanceFromOrigin() {
return distanceBetween(new Point(0.0 ,0.0));
}
public Point midpoint(Point other) {
return lerp(other, 0.5);
}
public Point lerp(Point other, double ratio) {
double diffX = other.x - this.x;
double diffY = other.y - this.y;
return new Point(ratio * diffX + this.x, ratio * diffY + this.y);
}
}