|
|
|
|
@ -25,9 +25,25 @@ public class TackGybeCommand implements Command {
|
|
|
|
|
} else {
|
|
|
|
|
boat.setBearing(Bearing.fromDegrees(race.getWindDirection().degrees()));
|
|
|
|
|
}*/
|
|
|
|
|
System.out.println(race.getWindDirection().degrees());
|
|
|
|
|
double angle = Math.max(race.getWindDirection().degrees(), boat.getBearing().degrees()) - Math.min(race.getWindDirection().degrees(), boat.getBearing().degrees());
|
|
|
|
|
boat.setBearing(Bearing.fromDegrees(angle));
|
|
|
|
|
/*double angle = Math.max(race.getWindDirection().degrees(), boat.getBearing().degrees()) - Math.min(race.getWindDirection().degrees(), boat.getBearing().degrees());
|
|
|
|
|
boat.setBearing(Bearing.fromDegrees(angle));*/
|
|
|
|
|
double boatAngle = boat.getBearing().degrees();
|
|
|
|
|
double windAngle =race.getWindDirection().degrees();
|
|
|
|
|
double differenceAngle = calcDistance(boatAngle, windAngle);
|
|
|
|
|
double angleA = windAngle + differenceAngle;
|
|
|
|
|
double angleB = windAngle - differenceAngle;
|
|
|
|
|
if(angleA % 360 == boatAngle){
|
|
|
|
|
boat.setBearing(Bearing.fromDegrees(angleB));
|
|
|
|
|
} else {
|
|
|
|
|
boat.setBearing(Bearing.fromDegrees(angleA));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private double calcDistance(double degreeA, double degreeB){
|
|
|
|
|
double phi = Math.abs(degreeB - degreeA) % 360;
|
|
|
|
|
double distance = phi > 180 ? 360 - phi : phi;
|
|
|
|
|
return distance;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|