fix to keep boats in the bounds

#story[#874, 873]
This commit is contained in:
hba56
2017-05-23 14:56:07 +12:00
parent 6a74b5fe36
commit db3f4a5b2b
2 changed files with 16 additions and 0 deletions
@@ -54,6 +54,9 @@ public class Angle implements Comparable<Angle> {
return this.degrees; return this.degrees;
} }
public void setDegrees(double degrees) {
this.degrees = degrees;
}
/** /**
* Returns the value of this Angle object, in radians. * Returns the value of this Angle object, in radians.
@@ -589,9 +589,22 @@ public class Race implements Runnable {
VMG newVMG = this.calculateVMG(boat, bearingBounds); VMG newVMG = this.calculateVMG(boat, bearingBounds);
//If the new vmg improves velocity, use it. //If the new vmg improves velocity, use it.
if (improvesVelocity(boat, newVMG)) { if (improvesVelocity(boat, newVMG)) {
boat.setVMG(newVMG); boat.setVMG(newVMG);
}else if (!GPSCoordinate.isInsideBoundary(boat.getCurrentPosition(), boundary)){
//checks to see if the new vmg sends the boat out of bounds and if so mirrors its direction in the wind
Azimuth azimuth = Azimuth.fromBearing(boat.getBearing());
GPSCoordinate test = GPSCoordinate.calculateNewPosition(boat.getCurrentPosition(),
(100.0 / Constants.NMToMetersConversion), azimuth);
double currDegrees = newVMG.getBearing().degrees();
double windDirectionDegrees = this.windDirection.degrees();
double tempHeading = (currDegrees - windDirectionDegrees +90)%360;
newVMG.getBearing().setDegrees(tempHeading);
boat.setVMG(newVMG);
} }