From 8ae540a6b9dc31ed26787cd8885f55d82d10d95a Mon Sep 17 00:00:00 2001 From: Erika Date: Sun, 19 Mar 2017 12:58:42 +1300 Subject: [PATCH] Switched bearing calculation from formula to using the geodectic calcultor -this abstracts a lot of the complexity -more accurate heading, and it is return as an azimuth rather than bearing making lat and long calculations easier #story[9] --- .idea/compiler.xml | 1 - .idea/misc.xml | 5 ++++- src/main/java/seng302/App.java | 2 -- .../seng302/Controllers/RaceController.java | 20 +++++++++++++++---- src/main/java/seng302/Model/BoatInRace.java | 13 +++++++++--- .../seng302/Model/ConstantVelocityRace.java | 20 +++---------------- 6 files changed, 33 insertions(+), 28 deletions(-) diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 076629ed..12dfecd9 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -10,7 +10,6 @@ - diff --git a/.idea/misc.xml b/.idea/misc.xml index 5629a5af..1b5f6446 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,5 +1,8 @@ + + + - + diff --git a/src/main/java/seng302/App.java b/src/main/java/seng302/App.java index 58eb0c8d..90f61908 100644 --- a/src/main/java/seng302/App.java +++ b/src/main/java/seng302/App.java @@ -20,8 +20,6 @@ public class App extends Application public static void main( String[] args ) { - - launch(args); } diff --git a/src/main/java/seng302/Controllers/RaceController.java b/src/main/java/seng302/Controllers/RaceController.java index 20d8a1cb..87c28675 100644 --- a/src/main/java/seng302/Controllers/RaceController.java +++ b/src/main/java/seng302/Controllers/RaceController.java @@ -12,6 +12,7 @@ import javafx.scene.control.cell.PropertyValueFactory; import javafx.scene.layout.AnchorPane; import javafx.scene.paint.Color; import javafx.util.Callback; +import org.geotools.referencing.GeodeticCalculator; import seng302.GPSCoordinate; import seng302.Model.ResizableRaceCanvas; import seng302.Model.*; @@ -80,14 +81,25 @@ public class RaceController extends Controller{ canvasBase.getChildren().add(raceMap); - ArrayList legs = new ArrayList<>(); - legs.add(new Leg("Start", 10, new GPSCoordinate(32.296577, -64.854304), new GPSCoordinate(32.296576, -64.854304), 0)); - legs.add(new Leg("Mark", 50, new GPSCoordinate(32.296577, -64.854304), new GPSCoordinate(32.308046, -64.831785), 1)); - + ArrayList legs = bermudaCourseLegs(); ConstantVelocityRace race = new ConstantVelocityRace(boats, legs, this); (new Thread(race)).start(); } + private ArrayList bermudaCourseLegs() { + ArrayList legs = new ArrayList<>(); + + GeodeticCalculator calc = new GeodeticCalculator(); + calc.setStartingGeographicPoint(32.296577, -64.854304); + calc.setDestinationGeographicPoint(32.293039, -64.843983); + double distance = calc.getOrthodromicDistance(); + Leg leg1 = new Leg("Start to Mark 1", distance, new GPSCoordinate(32.296577, -64.854304), + new GPSCoordinate(32.293039, -64.843983), 0); + + legs.add(leg1); + return legs; + } + } diff --git a/src/main/java/seng302/Model/BoatInRace.java b/src/main/java/seng302/Model/BoatInRace.java index 61039e8b..5dfc96e3 100644 --- a/src/main/java/seng302/Model/BoatInRace.java +++ b/src/main/java/seng302/Model/BoatInRace.java @@ -1,6 +1,7 @@ package seng302.Model; import javafx.scene.paint.Color; +import org.geotools.referencing.GeodeticCalculator; import seng302.GPSCoordinate; @@ -68,9 +69,15 @@ public class BoatInRace extends Boat { */ public double calculateHeading(){ //to be changed to coordinates when used to match reality. - double thetaHat = Math.atan2((currentLeg.getEndGraphCoordinate().getLatitude() - currentLeg.getStartGraphCoordinate().getLongitude()), - (currentLeg.getEndGraphCoordinate().getLatitude() - currentLeg.getStartGraphCoordinate().getLongitude())); - return thetaHat >= 0 ? Math.toDegrees(thetaHat): Math.toDegrees(thetaHat + 2 * Math.PI); + GeodeticCalculator calc = new GeodeticCalculator(); + calc.setStartingGeographicPoint(currentLeg.getStartGraphCoordinate().getLatitude(), currentLeg.getStartGraphCoordinate().getLongitude()); + + calc.setDestinationGeographicPoint(currentLeg.getEndGraphCoordinate().getLatitude(), currentLeg.getEndGraphCoordinate().getLongitude()); + + return calc.getAzimuth(); +// double thetaHat = Math.atan2((currentLeg.getEndGraphCoordinate().getLatitude() - currentLeg.getStartGraphCoordinate().getLongitude()), +// (currentLeg.getEndGraphCoordinate().getLatitude() - currentLeg.getStartGraphCoordinate().getLongitude())); +// return thetaHat >= 0 ? Math.toDegrees(thetaHat): Math.toDegrees(thetaHat + 2 * Math.PI); } } diff --git a/src/main/java/seng302/Model/ConstantVelocityRace.java b/src/main/java/seng302/Model/ConstantVelocityRace.java index 173360a6..b6472dfe 100644 --- a/src/main/java/seng302/Model/ConstantVelocityRace.java +++ b/src/main/java/seng302/Model/ConstantVelocityRace.java @@ -2,16 +2,13 @@ package seng302.Model; import seng302.Controllers.RaceController; -import java.awt.*; + import java.awt.geom.Point2D; -import org.geotools.geometry.DirectPosition1D; import org.geotools.referencing.GeodeticCalculator; import seng302.GPSCoordinate; -import seng302.GraphCoordinate; import java.util.ArrayList; -import java.util.concurrent.TimeUnit; /** * Created by cbt24 on 6/03/17. @@ -53,23 +50,12 @@ public class ConstantVelocityRace extends Race { Point2D startPoint = new Point2D.Double(oldCoordinates.getLatitude(), oldCoordinates.getLongitude()); geodeticCalculator.setStartingGeographicPoint(startPoint); - heading = 1; - double azimuth = 180 - heading; - - - System.out.println(heading); - geodeticCalculator.setDirection(azimuth, distanceTravelled * 1852 ); + geodeticCalculator.setDirection(heading, distanceTravelled * 1852); Point2D endPoint = geodeticCalculator.getDestinationGeographicPoint(); return new GPSCoordinate(endPoint.getX(), endPoint.getY()); } - - - - - - -} +} \ No newline at end of file