Added heading from each event that the boat is heading towards.

main
Fan-Wu Yang 9 years ago
parent 7c0d9203a5
commit 00bd194361

@ -45,7 +45,7 @@
</list> </list>
</option> </option>
</component> </component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_3" default="false"> <component name="ProjectRootManager" version="2" languageLevel="JDK_1_3" default="false" project-jdk-name="1.8 (1)" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" /> <output url="file://$PROJECT_DIR$/out" />
</component> </component>
<component name="SvnConfiguration"> <component name="SvnConfiguration">

@ -19,12 +19,12 @@ public class App
Boat boat5 = new Boat("Land Rover BAR", 10); Boat boat5 = new Boat("Land Rover BAR", 10);
Boat boat6 = new Boat("SoftBank Team Japan", 9); Boat boat6 = new Boat("SoftBank Team Japan", 9);
RaceMarker mark1 = new RaceMarker("Start", 0); RaceMarker mark1 = new RaceMarker("Start", 0, 0, 0);
RaceMarker mark2 = new RaceMarker("Mark", 120); RaceMarker mark2 = new RaceMarker("Mark", 120, 120, 0);
RaceMarker mark3 = new RaceMarker("Leeward Gate", 240); RaceMarker mark3 = new RaceMarker("Leeward Gate", 240, 240, 0);
RaceMarker mark4 = new RaceMarker("Windward Gate", 360); RaceMarker mark4 = new RaceMarker("Windward Gate", 360, 240, 120);
RaceMarker mark5 = new RaceMarker("Leeward Gate", 480); RaceMarker mark5 = new RaceMarker("Leeward Gate", 480, 240, 0);
RaceMarker mark6 = new RaceMarker("Finish", 600); RaceMarker mark6 = new RaceMarker("Finish", 600, 360, 0);
Boat[] all_boats = {boat1, boat2, boat3, boat4, boat5, boat6}; Boat[] all_boats = {boat1, boat2, boat3, boat4, boat5, boat6};
Boat[] boats = {all_boats[0], all_boats[1]}; Boat[] boats = {all_boats[0], all_boats[1]};

@ -13,10 +13,15 @@ public class ConstantVelocityRace extends Race {
private void generateRace() { private void generateRace() {
for(Boat boat : boats) { for(Boat boat : boats) {
for(RaceMarker raceMarker : marks) { 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()))); events.add(new Event(raceMarker, boat, (int) (raceMarker.getDistance() / boat.getVelocity())));
} }
} }
}
Collections.sort(events, (o1, o2) -> o1.getTime() - o2.getTime()); Collections.sort(events, (o1, o2) -> o1.getTime() - o2.getTime());
} }
} }

@ -11,6 +11,7 @@ public class Event {
private RaceMarker raceMarker; private RaceMarker raceMarker;
private Boat boat; private Boat boat;
private int time; private int time;
private RaceMarker goalMarker;
public Event(RaceMarker raceMarker, Boat boat, int time){ public Event(RaceMarker raceMarker, Boat boat, int time){
this.raceMarker = raceMarker; this.raceMarker = raceMarker;
@ -18,6 +19,19 @@ public class Event {
this.time = time; 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){ public void setTime(int time){
this.time = time; this.time = time;
} }
@ -27,6 +41,11 @@ public class Event {
} }
public String toString() { 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;
} }
} }

@ -6,16 +6,28 @@ package seng302;
public class RaceMarker { public class RaceMarker {
String name; String name;
double distance; 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.name = name;
this.distance = distance; this.distance = distance;
this.latitude = latitude;
this.longitude = longitude;
} }
public double getDistance() { public double getDistance() {
return distance; return distance;
} }
public double getLatitude() {
return latitude;
}
public double getLongitude() {
return longitude;
}
public String toString() { public String toString() {
return name; return name;
} }

@ -15,7 +15,7 @@ public class RandomisedRace extends Race {
private void generateRace() { private void generateRace() {
Random rand = new Random(); Random rand = new Random();
for (Boat boat: this.boats){ 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; int prevTime = 0;
for (RaceMarker raceMarker: marks){ for (RaceMarker raceMarker: marks){
int time = rand.nextInt(12) + 6; int time = rand.nextInt(12) + 6;

Loading…
Cancel
Save