From 89464e033efea44ef44ee21d1041f709e32bf1bc Mon Sep 17 00:00:00 2001 From: William Muir Date: Wed, 24 May 2017 00:08:55 +1200 Subject: [PATCH] Initial work on calculating when a gate is upwind or downwind Need to know if a gate is upwind or downwind to use the appropriate polar table Currently calculate the angle between the next mark and the vector of the current mark to the wind, if this angle is less than 90 degrees than the next mark should be down wind Pretty poor implementation currently, just prototype Doesn't appear to be working as intended currently. Just a prototype for how we could implement further tags: #story[956] --- .../controllers/RaceViewController.java | 14 ++++----- src/main/java/seng302/models/BoatGroup.java | 31 +++++++++++++++++++ .../java/seng302/models/mark/MarkGroup.java | 3 ++ 3 files changed, 41 insertions(+), 7 deletions(-) diff --git a/src/main/java/seng302/controllers/RaceViewController.java b/src/main/java/seng302/controllers/RaceViewController.java index 1f7ae19f..f1bd50b2 100644 --- a/src/main/java/seng302/controllers/RaceViewController.java +++ b/src/main/java/seng302/controllers/RaceViewController.java @@ -184,17 +184,17 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel updateBoatSelectionComboBox(); for (Yacht yacht : StreamParser.getBoatsPos().values()) { - System.out.println("\n\nyacht.getBoatName() = " + yacht.getBoatName()); - System.out.println("yacht.getLastMarkRounded() = " + yacht.getLastMarkRounded()); - System.out.println("yacht.getNextMark() = " + yacht.getNextMark()); if (yacht.getLastMarkRounded() != null) { - System.out.println(yacht.getLastMarkRounded().getName()); - } else { - System.out.println("sup"); + System.out.println("\n\nboat: " + yacht.getBoatName()); + System.out.println("last Mark: " + yacht.getLastMarkRounded().getName()); } if (yacht.getNextMark() != null){ - System.out.println("yacht = " + yacht.getNextMark().getName()); + System.out.println("next Mark: " + yacht.getNextMark().getName()); + for (BoatGroup bg : includedCanvasController.getBoatGroups()) { + bg.calculateLegDirection(); + } + } } diff --git a/src/main/java/seng302/models/BoatGroup.java b/src/main/java/seng302/models/BoatGroup.java index 3e97df5e..6ee1a3d8 100644 --- a/src/main/java/seng302/models/BoatGroup.java +++ b/src/main/java/seng302/models/BoatGroup.java @@ -12,6 +12,7 @@ import javafx.scene.shape.Line; import javafx.scene.shape.Polygon; import javafx.scene.text.Text; import javafx.scene.transform.Rotate; +import seng302.models.mark.Mark; import seng302.models.stream.StreamParser; import java.text.DateFormat; @@ -363,6 +364,36 @@ public class BoatGroup extends Group { } + public void calculateLegDirection() { + Mark lastMark = boat.getLastMarkRounded(); + Mark nextMark = boat.getNextMark(); + if (lastMark == null || nextMark == null) { + return; + } + + Double windDirection = StreamParser.getWindDirection(); + Double arbitraryDistance = 10d; + + Point2D lastMarkMidPoint = new Point2D(lastMark.getLatitude(), lastMark.getLongitude()); + Point2D nextMarkMidPoint = new Point2D(nextMark.getLatitude(), nextMark.getLongitude()); + + Double windDirX = lastMarkMidPoint.getX() + (lastMarkMidPoint.getX() + arbitraryDistance -lastMarkMidPoint.getX())*Math.cos(windDirection) - (lastMarkMidPoint.getY() + arbitraryDistance -lastMarkMidPoint.getY())*Math.sin(windDirection); + Double windDirY = lastMarkMidPoint.getY() + (lastMarkMidPoint.getX() + arbitraryDistance -lastMarkMidPoint.getX())*Math.sin(windDirection) + (lastMarkMidPoint.getY() + arbitraryDistance -lastMarkMidPoint.getY())*Math.cos(windDirection); + Point2D windDirPoint = new Point2D(windDirX, windDirY); + + Double angle = lastMarkMidPoint.angle(nextMarkMidPoint, windDirPoint); + + if (angle <= 90) { + System.out.println(lastMark.getName() + " is downwind"); + System.out.println(nextMark.getName() + " is upwind"); + } + +// if (lastMarkMidPoint.angle(nextMarkMidPoint, windDirPoint) <= 90) { +// boat.getNextMark().s +// } + } + + public void setIsSelected(Boolean isSelected) { this.isSelected = isSelected; setTeamNameObjectVisible(isSelected); diff --git a/src/main/java/seng302/models/mark/MarkGroup.java b/src/main/java/seng302/models/mark/MarkGroup.java index f7327107..a6651434 100644 --- a/src/main/java/seng302/models/mark/MarkGroup.java +++ b/src/main/java/seng302/models/mark/MarkGroup.java @@ -114,6 +114,9 @@ public class MarkGroup extends Group { } super.getChildren().add(line); + //Laylines +// if (mark.) + addLayLine(points1, 12.0, 90.0); addLayLine(points2, 12.0, 90.0); }