-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathCardinalDirection.java
55 lines (45 loc) · 1.63 KB
/
CardinalDirection.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
package com.team254.frc2020.controlboard;
import com.team254.lib.geometry.Rotation2d;
public enum CardinalDirection {
BACK(180),
FRONT(0),
LEFT(45, 90),
RIGHT(-45, -90),
NONE(0),
FRONT_LEFT(45, 45),
FRONT_RIGHT(-45, -45),
BACK_LEFT(-45, 135),
BACK_RIGHT(45, 235);
public final Rotation2d rotation;
private final Rotation2d inputDirection;
CardinalDirection(double degrees) {
this(degrees, degrees);
}
CardinalDirection(double degrees, double inputDirectionDegrees) {
rotation = Rotation2d.fromDegrees(degrees);
inputDirection = Rotation2d.fromDegrees(inputDirectionDegrees);
}
public static CardinalDirection findClosest(double xAxis, double yAxis) {
return findClosest(new Rotation2d(yAxis, -xAxis, true));
}
public static CardinalDirection findClosest(Rotation2d stickDirection) {
var values = CardinalDirection.values();
CardinalDirection closest = null;
double closestDistance = Double.MAX_VALUE;
for (int i = 0; i < values.length; i++) {
var checkDirection = values[i];
var distance = Math.abs(stickDirection.distance(checkDirection.inputDirection));
if (distance < closestDistance) {
closestDistance = distance;
closest = checkDirection;
}
}
return closest;
}
public static boolean isDiagonal(CardinalDirection cardinal) {
return cardinal == FRONT_LEFT || cardinal == FRONT_RIGHT || cardinal == BACK_LEFT || cardinal == BACK_RIGHT;
}
public Rotation2d getRotation() {
return rotation;
}
}