From 00bd1943614dd55bf178bc8fc0a09a17e59c8ce4 Mon Sep 17 00:00:00 2001 From: Fan-Wu Yang Date: Mon, 6 Mar 2017 16:59:09 +1300 Subject: [PATCH] Added heading from each event that the boat is heading towards. --- .idea/misc.xml | 2 +- src/main/java/seng302/App.java | 12 +++++------ .../java/seng302/ConstantVelocityRace.java | 9 ++++++-- src/main/java/seng302/Event.java | 21 ++++++++++++++++++- src/main/java/seng302/RaceMarker.java | 14 ++++++++++++- src/main/java/seng302/RandomisedRace.java | 2 +- 6 files changed, 48 insertions(+), 12 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 9cbaf1bd..59508ab9 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -45,7 +45,7 @@ - + diff --git a/src/main/java/seng302/App.java b/src/main/java/seng302/App.java index 5fbfbac7..95e1170e 100644 --- a/src/main/java/seng302/App.java +++ b/src/main/java/seng302/App.java @@ -19,12 +19,12 @@ public class App Boat boat5 = new Boat("Land Rover BAR", 10); Boat boat6 = new Boat("SoftBank Team Japan", 9); - RaceMarker mark1 = new RaceMarker("Start", 0); - RaceMarker mark2 = new RaceMarker("Mark", 120); - RaceMarker mark3 = new RaceMarker("Leeward Gate", 240); - RaceMarker mark4 = new RaceMarker("Windward Gate", 360); - RaceMarker mark5 = new RaceMarker("Leeward Gate", 480); - RaceMarker mark6 = new RaceMarker("Finish", 600); + RaceMarker mark1 = new RaceMarker("Start", 0, 0, 0); + RaceMarker mark2 = new RaceMarker("Mark", 120, 120, 0); + RaceMarker mark3 = new RaceMarker("Leeward Gate", 240, 240, 0); + RaceMarker mark4 = new RaceMarker("Windward Gate", 360, 240, 120); + RaceMarker mark5 = new RaceMarker("Leeward Gate", 480, 240, 0); + RaceMarker mark6 = new RaceMarker("Finish", 600, 360, 0); Boat[] all_boats = {boat1, boat2, boat3, boat4, boat5, boat6}; Boat[] boats = {all_boats[0], all_boats[1]}; diff --git a/src/main/java/seng302/ConstantVelocityRace.java b/src/main/java/seng302/ConstantVelocityRace.java index f78d8d66..fedae75e 100644 --- a/src/main/java/seng302/ConstantVelocityRace.java +++ b/src/main/java/seng302/ConstantVelocityRace.java @@ -13,8 +13,13 @@ public class ConstantVelocityRace extends Race { private void generateRace() { for(Boat boat : boats) { - for(RaceMarker raceMarker : marks) { - events.add(new Event(raceMarker, boat, (int)(raceMarker.getDistance() / boat.getVelocity()))); + for(int i = 0; i < marks.length; i++) { + RaceMarker raceMarker = marks[i]; + if (i != marks.length - 1) { + events.add(new Event(raceMarker, boat, (int) (raceMarker.getDistance() / boat.getVelocity()), marks[i + 1])); + } else { + events.add(new Event(raceMarker, boat, (int) (raceMarker.getDistance() / boat.getVelocity()))); + } } } Collections.sort(events, (o1, o2) -> o1.getTime() - o2.getTime()); diff --git a/src/main/java/seng302/Event.java b/src/main/java/seng302/Event.java index 7520ce69..521c69d8 100644 --- a/src/main/java/seng302/Event.java +++ b/src/main/java/seng302/Event.java @@ -11,6 +11,7 @@ public class Event { private RaceMarker raceMarker; private Boat boat; private int time; + private RaceMarker goalMarker; public Event(RaceMarker raceMarker, Boat boat, int time){ this.raceMarker = raceMarker; @@ -18,6 +19,19 @@ public class Event { this.time = time; } + public Event(RaceMarker raceMarker, Boat boat, int time, RaceMarker goalMarker){ + this.raceMarker = raceMarker; + this.boat = boat; + this.time = time; + this.goalMarker = goalMarker; + } + + public double calculateHeading(){ + //to be changed to cooridinates when used to match reality. + double thetaHat = Math.atan2((goalMarker.getLatitude() - raceMarker.getLatitude()), (goalMarker.getLongitude() - raceMarker.getLongitude())); + return thetaHat >= 0 ? Math.toDegrees(thetaHat): Math.toDegrees(thetaHat + 2 * Math.PI); + } + public void setTime(int time){ this.time = time; } @@ -27,6 +41,11 @@ public class Event { } public String toString() { - return boat.getName() + " passed " + raceMarker.toString() + " at " + time + " seconds."; + String stringToReturn = boat.getName() + " passed " + raceMarker.toString() + " at " + time + " seconds"; + if (goalMarker != null){ + stringToReturn += " at heading " + calculateHeading(); + } + stringToReturn += "."; + return stringToReturn; } } diff --git a/src/main/java/seng302/RaceMarker.java b/src/main/java/seng302/RaceMarker.java index 56babca0..1b8718e5 100644 --- a/src/main/java/seng302/RaceMarker.java +++ b/src/main/java/seng302/RaceMarker.java @@ -6,16 +6,28 @@ package seng302; public class RaceMarker { String name; double distance; + double latitude; + double longitude; - public RaceMarker(String name, double distance) { + public RaceMarker(String name, double distance, double latitude, double longitude) { this.name = name; this.distance = distance; + this.latitude = latitude; + this.longitude = longitude; } public double getDistance() { return distance; } + public double getLatitude() { + return latitude; + } + + public double getLongitude() { + return longitude; + } + public String toString() { return name; } diff --git a/src/main/java/seng302/RandomisedRace.java b/src/main/java/seng302/RandomisedRace.java index a7be7a44..1e861d61 100644 --- a/src/main/java/seng302/RandomisedRace.java +++ b/src/main/java/seng302/RandomisedRace.java @@ -15,7 +15,7 @@ public class RandomisedRace extends Race { private void generateRace() { Random rand = new Random(); for (Boat boat: this.boats){ - events.add(new Event(new RaceMarker("Start", 0), boat, 0)); + events.add(new Event(new RaceMarker("Start", 0, 0, 0), boat, 0)); int prevTime = 0; for (RaceMarker raceMarker: marks){ int time = rand.nextInt(12) + 6;