Reads data from boat XML file

- Creates marks for building CompoundMarks (formerly Markers)
- Rearranged Boat constructor and removed velocity

#story[782]
This commit is contained in:
cbt24
2017-05-10 13:57:20 +12:00
parent 6e9386f4fb
commit 69cd44bda8
38 changed files with 511 additions and 384 deletions
@@ -2,8 +2,8 @@ package seng302.Mock;
import seng302.GPSCoordinate;
import seng302.Model.Boat;
import seng302.Model.CompoundMark;
import seng302.Model.Leg;
import seng302.Model.Marker;
import seng302.RaceDataSource;
import java.time.ZonedDateTime;
@@ -82,7 +82,7 @@ public class StreamedCourse extends Observable implements RaceDataSource {
return streamedCourseXMLReader.getLegs();
}
public List<Marker> getMarkers() { return streamedCourseXMLReader.getMarkers(); }
public List<CompoundMark> getMarkers() { return streamedCourseXMLReader.getCompoundMarks(); }
public List<GPSCoordinate> getBoundary() {
return streamedCourseXMLReader.getBoundary();
@@ -6,8 +6,8 @@ import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import seng302.GPSCoordinate;
import seng302.Model.CompoundMark;
import seng302.Model.Leg;
import seng302.Model.Marker;
import seng302.XMLReader;
import javax.xml.parsers.ParserConfigurationException;
@@ -25,10 +25,10 @@ public class StreamedCourseXMLReader extends XMLReader {
private static final double COORDINATEPADDING = 0.000;
private GPSCoordinate mapTopLeft, mapBottomRight;
private final List<GPSCoordinate> boundary = new ArrayList<>();
private final Map<Integer,Element> compoundMarks = new HashMap<>();
private final Map<Integer,Element> compoundMarkMap = new HashMap<>();
private final Map<Integer, StreamedBoat> participants = new HashMap<>();
private final List<Leg> legs = new ArrayList<>();
private final List<Marker> markers = new ArrayList<>();
private final List<CompoundMark> compoundMarks = new ArrayList<>();
private ZonedDateTime creationTimeDate;
private ZonedDateTime raceStartTime;
private int raceID;
@@ -138,7 +138,7 @@ public class StreamedCourseXMLReader extends XMLReader {
/**
* Indexes CompoundMark elements by their ID for use in generating the course, and populates list of Markers.
* @see seng302.Model.Marker
* @see CompoundMark
*/
private void readCompoundMarks() throws StreamedCourseXMLException {
Element nCourse = (Element) doc.getElementsByTagName("Course").item(0);
@@ -146,27 +146,27 @@ public class StreamedCourseXMLReader extends XMLReader {
Node compoundMark = nCourse.getChildNodes().item(i);
if(compoundMark.getNodeName().equals("CompoundMark")) {
int compoundMarkID = getCompoundMarkID((Element) compoundMark);
compoundMarks.put(compoundMarkID, (Element)compoundMark);
markers.add(getMarker(compoundMarkID));
compoundMarkMap.put(compoundMarkID, (Element)compoundMark);
compoundMarks.add(getMarker(compoundMarkID));
}
}
}
/**
* Generates a Marker from the CompoundMark element with given ID.
* Generates a CompoundMark from the CompoundMark element with given ID.
* @param compoundMarkID index of required CompoundMark element
* @return generated Marker
* @return generated CompoundMark
* @throws StreamedCourseXMLException if CompoundMark element contains unhandled number of compoundMarks
* @see seng302.Model.Marker
* @see CompoundMark
*/
private Marker getMarker(int compoundMarkID) throws StreamedCourseXMLException {
Element compoundMark = compoundMarks.get(compoundMarkID);
private CompoundMark getMarker(int compoundMarkID) throws StreamedCourseXMLException {
Element compoundMark = compoundMarkMap.get(compoundMarkID);
NodeList nMarks = compoundMark.getElementsByTagName("Mark");
Marker marker;
CompoundMark marker;
switch(nMarks.getLength()) {
case 1: marker = new Marker(getCoordinate((Element)nMarks.item(0))); break;
case 2: marker = new Marker(getCoordinate((Element)nMarks.item(0)), getCoordinate((Element)nMarks.item(1))); break;
case 1: marker = new CompoundMark(getCoordinate((Element)nMarks.item(0))); break;
case 2: marker = new CompoundMark(getCoordinate((Element)nMarks.item(0)), getCoordinate((Element)nMarks.item(1))); break;
default: throw new StreamedCourseXMLException();
}
@@ -194,24 +194,24 @@ public class StreamedCourseXMLReader extends XMLReader {
* @return value of "name" attribute
*/
private String getCompoundMarkName(int compoundMarkID) {
return compoundMarks.get(compoundMarkID).getAttribute("Name");
return compoundMarkMap.get(compoundMarkID).getAttribute("Name");
}
/**
* Populates list of legs given CompoundMarkSequence element and referenced CompoundMark elements.
* @throws StreamedCourseXMLException if markers cannot be resolved from CompoundMark
* @throws StreamedCourseXMLException if compoundMarks cannot be resolved from CompoundMark
*/
private void readCompoundMarkSequence() throws StreamedCourseXMLException {
Element nCompoundMarkSequence = (Element) doc.getElementsByTagName("CompoundMarkSequence").item(0);
NodeList nCorners = nCompoundMarkSequence.getElementsByTagName("Corner");
Element markXML = (Element)nCorners.item(0);
Marker lastMarker = getMarker(getCompoundMarkID(markXML));
CompoundMark lastCompoundMark = getMarker(getCompoundMarkID(markXML));
String legName = getCompoundMarkName(getCompoundMarkID(markXML));
for(int i = 1; i < nCorners.getLength(); i++) {
markXML = (Element)nCorners.item(i);
Marker currentMarker = getMarker(getCompoundMarkID(markXML));
legs.add(new Leg(legName, lastMarker, currentMarker, i-1));
lastMarker = currentMarker;
CompoundMark currentCompoundMark = getMarker(getCompoundMarkID(markXML));
legs.add(new Leg(legName, lastCompoundMark, currentCompoundMark, i-1));
lastCompoundMark = currentCompoundMark;
legName = getCompoundMarkName(getCompoundMarkID(markXML));
}
}
@@ -253,7 +253,7 @@ public class StreamedCourseXMLReader extends XMLReader {
return legs;
}
public List<Marker> getMarkers() { return markers; }
public List<CompoundMark> getCompoundMarks() { return compoundMarks; }
public Double getPadding() {
return COORDINATEPADDING;
@@ -4,7 +4,7 @@ import seng302.Controllers.RaceController;
import seng302.GPSCoordinate;
import seng302.Model.Boat;
import seng302.Model.Leg;
import seng302.Model.Marker;
import seng302.Model.CompoundMark;
import seng302.Model.Race;
import seng302.Networking.Messages.BoatLocation;
import seng302.Networking.Messages.BoatStatus;
@@ -25,13 +25,13 @@ public class StreamedRace extends Race {
public void initialiseBoats() {
Leg officialStart = legs.get(0);
String name = officialStart.getName();
Marker endMarker = officialStart.getEndMarker();
CompoundMark endCompoundMark = officialStart.getEndCompoundMark();
for (int i = 0; i < startingBoats.size(); i++) {
Boat boat = startingBoats.get(i);
if (boat != null) {
Leg startLeg = new Leg(name, 0);
startLeg.setEndMarker(endMarker);
startLeg.setEndCompoundMark(endCompoundMark);
boat.setCurrentLeg(startLeg);
}
}
@@ -72,8 +72,8 @@ public class BoatInRace extends Boat {
public double calculateAzimuth() {
GeodeticCalculator calc = new GeodeticCalculator();
GPSCoordinate start = currentLeg.getStartMarker().getAverageGPSCoordinate();
GPSCoordinate end = currentLeg.getEndMarker().getAverageGPSCoordinate();
GPSCoordinate start = currentLeg.getStartCompoundMark().getAverageGPSCoordinate();
GPSCoordinate end = currentLeg.getEndCompoundMark().getAverageGPSCoordinate();
calc.setStartingGeographicPoint(start.getLongitude(), start.getLatitude());
calc.setDestinationGeographicPoint(end.getLongitude(), end.getLatitude());
@@ -8,12 +8,12 @@ import java.awt.geom.Point2D;
/**
* Created by esa46 on 29/03/17.
*/
public class Marker {
public class CompoundMark {
private final GPSCoordinate averageGPSCoordinate;
private final GPSCoordinate mark1;
private final GPSCoordinate mark2;
public Marker(GPSCoordinate mark1) {
public CompoundMark(GPSCoordinate mark1) {
this.mark1 = mark1;
this.mark2 = mark1;
@@ -21,7 +21,7 @@ public class Marker {
}
public Marker(GPSCoordinate mark1, GPSCoordinate mark2) {
public CompoundMark(GPSCoordinate mark1, GPSCoordinate mark2) {
this.mark1 = mark1;
this.mark2 = mark2;
@@ -60,19 +60,19 @@
// public void initialiseBoats() {
// Leg officialStart = legs.get(0);
// String name = officialStart.getName();
// Marker endMarker = officialStart.getEndMarker();
// CompoundMark endMarker = officialStart.getEndCompoundMark();
//
// BoatInRace.setTrackPointTimeInterval(BoatInRace.getBaseTrackPointTimeInterval() / scaleFactor);
//
// ArrayList<Marker> startMarkers = getSpreadStartingPositions();
// ArrayList<CompoundMark> startMarkers = getSpreadStartingPositions();
// for (int i = 0; i < startingBoats.size(); i++) {
// BoatInRace boat = startingBoats.get(i);
// if (boat != null) {
// boat.setScaledVelocity(boat.getVelocity() * scaleFactor);
// Leg startLeg = new Leg(name, 0);
// boat.setCurrentPosition(startMarkers.get(i).getAverageGPSCoordinate());
// startLeg.setStartMarker(startMarkers.get(i));
// startLeg.setEndMarker(endMarker);
// startLeg.setStartCompoundMark(startMarkers.get(i));
// startLeg.setEndCompoundMark(endMarker);
// startLeg.calculateDistance();
// boat.setCurrentLeg(startLeg);
// boat.setHeading(boat.calculateHeading());
@@ -85,10 +85,10 @@
// *
// * @return list of starting positions
// */
// public ArrayList<Marker> getSpreadStartingPositions() {
// public ArrayList<CompoundMark> getSpreadStartingPositions() {
//
// int nBoats = startingBoats.size();
// Marker marker = legs.get(0).getStartMarker();
// CompoundMark marker = legs.get(0).getStartCompoundMark();
//
// GeodeticCalculator initialCalc = new GeodeticCalculator();
// initialCalc.setStartingGeographicPoint(marker.getMark1().getLongitude(), marker.getMark1().getLatitude());
@@ -100,12 +100,12 @@
//
// GeodeticCalculator positionCalc = new GeodeticCalculator();
// positionCalc.setStartingGeographicPoint(marker.getMark1().getLongitude(), marker.getMark1().getLatitude());
// ArrayList<Marker> positions = new ArrayList<>();
// ArrayList<CompoundMark> positions = new ArrayList<>();
//
// for (int i = 0; i < nBoats; i++) {
// positionCalc.setDirection(azimuth, distanceBetweenBoats);
// Point2D position = positionCalc.getDestinationGeographicPoint();
// positions.add(new Marker(new GPSCoordinate(position.getY(), position.getX())));
// positions.add(new CompoundMark(new GPSCoordinate(position.getY(), position.getX())));
//
// positionCalc = new GeodeticCalculator();
// positionCalc.setStartingGeographicPoint(position);
@@ -147,7 +147,7 @@
// //update boat's distance travelled
// boat.setDistanceTravelledInLeg(totalDistanceTravelled);
// //Calculate boat's new position by adding the distance travelled onto the start point of the leg
// boat.setCurrentPosition(calculatePosition(boat.getCurrentLeg().getStartMarker().getAverageGPSCoordinate(),
// boat.setCurrentPosition(calculatePosition(boat.getCurrentLeg().getStartCompoundMark().getAverageGPSCoordinate(),
// totalDistanceTravelled, boat.calculateAzimuth()));
// }
// }
+15 -15
View File
@@ -10,8 +10,8 @@ import seng302.GPSCoordinate;
public class Leg {
private final String name; //nautical miles
private double distance;
private Marker startMarker;
private Marker endMarker;
private CompoundMark startCompoundMark;
private CompoundMark endCompoundMark;
private final int legNumber;
/**
@@ -22,10 +22,10 @@ public class Leg {
* @param end marker
* @param number Leg's position in race
*/
public Leg(String name, Marker start, Marker end, int number) {
public Leg(String name, CompoundMark start, CompoundMark end, int number) {
this.name = name;
this.startMarker = start;
this.endMarker = end;
this.startCompoundMark = start;
this.endCompoundMark = end;
this.legNumber = number;
calculateDistance();
}
@@ -70,20 +70,20 @@ public class Leg {
}
public Marker getStartMarker() {
return startMarker;
public CompoundMark getStartCompoundMark() {
return startCompoundMark;
}
public void setStartMarker(Marker startMarker) {
this.startMarker = startMarker;
public void setStartCompoundMark(CompoundMark startCompoundMark) {
this.startCompoundMark = startCompoundMark;
}
public Marker getEndMarker() {
return endMarker;
public CompoundMark getEndCompoundMark() {
return endCompoundMark;
}
public void setEndMarker(Marker endMarker) {
this.endMarker = endMarker;
public void setEndCompoundMark(CompoundMark endCompoundMark) {
this.endCompoundMark = endCompoundMark;
}
/**
@@ -93,8 +93,8 @@ public class Leg {
GeodeticCalculator calc = new GeodeticCalculator();
//Load start and end of leg
GPSCoordinate startMarker = this.startMarker.getAverageGPSCoordinate();
GPSCoordinate endMarker = this.endMarker.getAverageGPSCoordinate();
GPSCoordinate startMarker = this.startCompoundMark.getAverageGPSCoordinate();
GPSCoordinate endMarker = this.endCompoundMark.getAverageGPSCoordinate();
calc.setStartingGeographicPoint(startMarker.getLongitude(), startMarker.getLatitude());
calc.setDestinationGeographicPoint(endMarker.getLongitude(), endMarker.getLatitude());
this.distance = calc.getOrthodromicDistance() / Constants.NMToMetersConversion;
@@ -28,7 +28,7 @@ public class ResizableRaceCanvas extends ResizableCanvas {
private boolean annoSpeed = true;
private boolean annoPath = true;
private List<Color> colours;
private final List<Marker> markers;
private final List<CompoundMark> compoundMarks;
double[] xpoints = {}, ypoints = {};
private final RaceDataSource raceData;
@@ -42,7 +42,7 @@ public class ResizableRaceCanvas extends ResizableCanvas {
setMap(new RaceMap(lat1, long1, lat2, long2, (int) getWidth(), (int) getHeight()));
this.markers = raceData.getMarkers();
this.compoundMarks = raceData.getMarkers();
makeColours();
this.raceData = raceData;
}
@@ -201,15 +201,15 @@ public class ResizableRaceCanvas extends ResizableCanvas {
}
/**
* Draw race markers
* Draw race compoundMarks
*/
private void drawMarkers() {
for(Marker marker: markers) {
GraphCoordinate mark1 = this.map.convertGPS(marker.getMark1());
for(CompoundMark compoundMark : compoundMarks) {
GraphCoordinate mark1 = this.map.convertGPS(compoundMark.getMark1());
// removed drawing of lines between the marks as only
// the start and finish line should have a line drawn
if(marker.isCompoundMark()) {
GraphCoordinate mark2 = this.map.convertGPS(marker.getMark2());
if(compoundMark.isCompoundMark()) {
GraphCoordinate mark2 = this.map.convertGPS(compoundMark.getMark2());
displayPoint(mark1, Color.LIMEGREEN);
displayPoint(mark2, Color.LIMEGREEN);
} else {
@@ -1,8 +1,8 @@
package seng302;
import seng302.Model.Boat;
import seng302.Model.CompoundMark;
import seng302.Model.Leg;
import seng302.Model.Marker;
import java.time.ZonedDateTime;
import java.util.List;
@@ -13,7 +13,7 @@ import java.util.List;
public interface RaceDataSource {
List<Boat> getBoats();
List<Leg> getLegs();
List<Marker> getMarkers();
List<CompoundMark> getMarkers();
List<GPSCoordinate> getBoundary();
ZonedDateTime getZonedDateTime();
@@ -89,10 +89,10 @@ public class RaceXMLReader extends XMLReader implements RaceDataSource {
for (int i = 0; i < nLegs.getLength(); i++) {
String label = getTextValueOfNode((Element) nLegs.item(i), "name");
NodeList start = ((Element) nLegs.item(i)).getElementsByTagName("start");
Marker startMarker = getMarker(start);
CompoundMark startCompoundMark = getMarker(start);
NodeList finish = ((Element) nLegs.item(i)).getElementsByTagName("finish");
Marker finishMarker = getMarker(finish);
legs.add(new Leg(label, startMarker, finishMarker, i));
CompoundMark finishCompoundMark = getMarker(finish);
legs.add(new Leg(label, startCompoundMark, finishCompoundMark, i));
}
}
@@ -172,7 +172,7 @@ public class RaceXMLReader extends XMLReader implements RaceDataSource {
* @param start base nodelist this should be the tag that contains <coordinate></coordinate>
* @return
*/
private Marker getMarker(NodeList start) {
private CompoundMark getMarker(NodeList start) {
return getMarker(start, 0);
}
@@ -182,7 +182,7 @@ public class RaceXMLReader extends XMLReader implements RaceDataSource {
* @param startIndex index in the node that has the coordinate tag
* @return
*/
private Marker getMarker(NodeList start, int startIndex) {
private CompoundMark getMarker(NodeList start, int startIndex) {
return getMarker(start, startIndex, 0);
}
@@ -193,7 +193,7 @@ public class RaceXMLReader extends XMLReader implements RaceDataSource {
* @param nodeIndex coordinate index
* @return
*/
private Marker getMarker(NodeList start, int startIndex, int nodeIndex) {
private CompoundMark getMarker(NodeList start, int startIndex, int nodeIndex) {
NodeList nodeList = ((Element) start.item(startIndex)).getElementsByTagName("marker");
Element marker = (Element) nodeList.item(nodeIndex);
return getMarker(marker);
@@ -204,7 +204,7 @@ public class RaceXMLReader extends XMLReader implements RaceDataSource {
* @param markerNode marker to turn into coordinates
* @return
*/
private Marker getMarker(Element markerNode) {
private CompoundMark getMarker(Element markerNode) {
NodeList nCoordinates = markerNode.getElementsByTagName("coordinate");
@@ -215,7 +215,7 @@ public class RaceXMLReader extends XMLReader implements RaceDataSource {
} else {
side2 = side1;
}
return new Marker(side1, side2);
return new CompoundMark(side1, side2);
}
@@ -265,7 +265,7 @@ public class RaceXMLReader extends XMLReader implements RaceDataSource {
}
@Override
public List<Marker> getMarkers() {
public List<CompoundMark> getMarkers() {
return null;
}
@@ -42,7 +42,7 @@
<leg>
<name>Start to Mark 1</name>
<start>
<marker>
<compoundMark>
<coordinate>
<latitude>32.296577</latitude>
<longitude>-64.854304</longitude>
@@ -51,29 +51,29 @@
<latitude>32.293771</latitude>
<longitude>-64.855242</longitude>
</coordinate>
</marker>
</compoundMark>
</start>
<finish>
<marker>
<compoundMark>
<coordinate>
<latitude>32.293039</latitude>
<longitude>-64.843983</longitude>
</coordinate>
</marker>
</compoundMark>
</finish>
</leg>
<leg>
<name>Mark 1 to Leeward Gate</name>
<start>
<marker>
<compoundMark>
<coordinate>
<latitude>32.293039</latitude>
<longitude>-64.843983</longitude>
</coordinate>
</marker>
</compoundMark>
</start>
<finish>
<marker>
<compoundMark>
<coordinate>
<latitude>32.309693</latitude>
<longitude>-64.835249</longitude>
@@ -82,13 +82,13 @@
<latitude>32.308046</latitude>
<longitude>-64.831785</longitude>
</coordinate>
</marker>
</compoundMark>
</finish>
</leg>
<leg>
<name>Leeward Gate to Windward Gate</name>
<start>
<marker>
<compoundMark>
<coordinate>
<latitude>32.309693</latitude>
<longitude>-64.835249</longitude>
@@ -97,10 +97,10 @@
<latitude>32.308046</latitude>
<longitude>-64.831785</longitude>
</coordinate>
</marker>
</compoundMark>
</start>
<finish>
<marker>
<compoundMark>
<coordinate>
<latitude>32.284680</latitude>
<longitude>-64.850045</longitude>
@@ -109,13 +109,13 @@
<latitude>32.280164</latitude>
<longitude>-64.847591</longitude>
</coordinate>
</marker>
</compoundMark>
</finish>
</leg>
<leg>
<name>Windward Gate to Leeward Gate</name>
<start>
<marker>
<compoundMark>
<coordinate>
<latitude>32.284680</latitude>
<longitude>-64.850045</longitude>
@@ -124,10 +124,10 @@
<latitude>32.280164</latitude>
<longitude>-64.847591</longitude>
</coordinate>
</marker>
</compoundMark>
</start>
<finish>
<marker>
<compoundMark>
<coordinate>
<latitude>32.309693</latitude>
<longitude>-64.835249</longitude>
@@ -136,13 +136,13 @@
<latitude>32.308046</latitude>
<longitude>-64.831785</longitude>
</coordinate>
</marker>
</compoundMark>
</finish>
</leg>
<leg>
<name>Leeward Gate to Finish</name>
<start>
<marker>
<compoundMark>
<coordinate>
<latitude>32.309693</latitude>
<longitude>-64.835249</longitude>
@@ -151,10 +151,10 @@
<latitude>32.308046</latitude>
<longitude>-64.831785</longitude>
</coordinate>
</marker>
</compoundMark>
</start>
<finish>
<marker>
<compoundMark>
<coordinate>
<latitude>32.317379</latitude>
<longitude>-64.839291</longitude>
@@ -163,7 +163,7 @@
<latitude>32.317257</latitude>
<longitude>-64.836260</longitude>
</coordinate>
</marker>
</compoundMark>
</finish>
</leg>
</legs>
@@ -214,7 +214,7 @@
<longitude>-64.849184</longitude>
</coordinate>
</boundaries>
<marker>
<compoundMark>
<name>Start Line</name>
<coordinate>
<latitude>32.296577</latitude>
@@ -224,15 +224,15 @@
<latitude>32.293771</latitude>
<longitude>-64.855242</longitude>
</coordinate>
</marker>
<marker>
</compoundMark>
<compoundMark>
<name>Mark</name>
<coordinate>
<latitude>32.293039</latitude>
<longitude>-64.843983</longitude>
</coordinate>
</marker>
<marker>
</compoundMark>
<compoundMark>
<name>Windward Gate</name>
<coordinate>
<latitude>32.284680</latitude>
@@ -242,8 +242,8 @@
<latitude>32.280164</latitude>
<longitude>-64.847591</longitude>
</coordinate>
</marker>
<marker>
</compoundMark>
<compoundMark>
<name>Leeward Gate</name>
<coordinate>
<latitude>32.309693</latitude>
@@ -253,8 +253,8 @@
<latitude>32.308046</latitude>
<longitude>-64.831785</longitude>
</coordinate>
</marker>
<marker>
</compoundMark>
<compoundMark>
<name>Finish Line</name>
<coordinate>
<latitude>32.317379</latitude>
@@ -264,6 +264,6 @@
<latitude>32.317257</latitude>
<longitude>-64.836260</longitude>
</coordinate>
</marker>
</compoundMark>
</course>
</race>
@@ -5,7 +5,7 @@ import org.junit.Ignore;
import org.junit.Test;
import seng302.GPSCoordinate;
import seng302.Model.Leg;
import seng302.Model.Marker;
import seng302.Model.CompoundMark;
import java.util.List;
@@ -87,8 +87,8 @@ public class StreamedRaceTest {
GPSCoordinate topLeft = streamedCourseXMLReader.getMapTopLeft();
GPSCoordinate bottomRight = streamedCourseXMLReader.getMapBottomRight();
for(Marker marker: streamedCourseXMLReader.getMarkers()) {
GPSCoordinate centre = marker.getAverageGPSCoordinate();
for(CompoundMark compoundMark : streamedCourseXMLReader.getCompoundMarks()) {
GPSCoordinate centre = compoundMark.getAverageGPSCoordinate();
assertTrue(centre.getLatitude() < bottomRight.getLatitude());
assertTrue(centre.getLatitude() > topLeft.getLatitude());
assertTrue(centre.getLongitude() > bottomRight.getLongitude());
@@ -19,18 +19,18 @@ public class BoatInRaceTest {
@Test
public void calculateDueNorthAzimuthReturns0() {
Marker startMarker = new Marker(ORIGIN_COORDS);
Marker endMarker = new Marker(new GPSCoordinate(50, 0));
Leg start = new Leg("Start", startMarker, endMarker, 0);
CompoundMark startCompoundMark = new CompoundMark(ORIGIN_COORDS);
CompoundMark endCompoundMark = new CompoundMark(new GPSCoordinate(50, 0));
Leg start = new Leg("Start", startCompoundMark, endCompoundMark, 0);
TEST_BOAT.setCurrentLeg(start);
assertEquals(TEST_BOAT.calculateAzimuth(), 0, 1e-8);
}
@Test
public void calculateDueSouthAzimuthReturns180() {
Marker startMarker = new Marker(ORIGIN_COORDS);
Marker endMarker = new Marker(new GPSCoordinate(-50, 0));
Leg start = new Leg("Start", startMarker, endMarker, 0);
CompoundMark startCompoundMark = new CompoundMark(ORIGIN_COORDS);
CompoundMark endCompoundMark = new CompoundMark(new GPSCoordinate(-50, 0));
Leg start = new Leg("Start", startCompoundMark, endCompoundMark, 0);
TEST_BOAT.setCurrentLeg(start);
assertEquals(TEST_BOAT.calculateAzimuth(), 180, 1e-8);
}
@@ -39,9 +39,9 @@ public class BoatInRaceTest {
@Test
public void calculateDueEastAzimuthReturns90() {
Marker startMarker = new Marker(ORIGIN_COORDS);
Marker endMarker = new Marker(new GPSCoordinate(0, 50));
Leg start = new Leg("Start", startMarker, endMarker, 0);
CompoundMark startCompoundMark = new CompoundMark(ORIGIN_COORDS);
CompoundMark endCompoundMark = new CompoundMark(new GPSCoordinate(0, 50));
Leg start = new Leg("Start", startCompoundMark, endCompoundMark, 0);
TEST_BOAT.setCurrentLeg(start);
assertEquals(TEST_BOAT.calculateAzimuth(), 90, 1e-8);
}
@@ -49,9 +49,9 @@ public class BoatInRaceTest {
@Test
public void calculateDueWestAzimuthReturnsNegative90() {
Marker startMarker = new Marker(ORIGIN_COORDS);
Marker endMarker = new Marker(new GPSCoordinate(0, -50));
Leg start = new Leg("Start", startMarker, endMarker, 0);
CompoundMark startCompoundMark = new CompoundMark(ORIGIN_COORDS);
CompoundMark endCompoundMark = new CompoundMark(new GPSCoordinate(0, -50));
Leg start = new Leg("Start", startCompoundMark, endCompoundMark, 0);
TEST_BOAT.setCurrentLeg(start);
assertEquals(TEST_BOAT.calculateAzimuth(), -90, 1e-8);
@@ -60,9 +60,9 @@ public class BoatInRaceTest {
@Test
public void calculateDueNorthHeadingReturns0() {
Marker startMarker = new Marker(ORIGIN_COORDS);
Marker endMarker = new Marker(new GPSCoordinate(50, 0));
Leg start = new Leg("Start", startMarker, endMarker, 0);
CompoundMark startCompoundMark = new CompoundMark(ORIGIN_COORDS);
CompoundMark endCompoundMark = new CompoundMark(new GPSCoordinate(50, 0));
Leg start = new Leg("Start", startCompoundMark, endCompoundMark, 0);
TEST_BOAT.setCurrentLeg(start);
assertEquals(TEST_BOAT.calculateHeading(), 0, 1e-8);
}
@@ -70,27 +70,27 @@ public class BoatInRaceTest {
@Test
public void calculateDueEastHeadingReturns90() {
Marker startMarker = new Marker(ORIGIN_COORDS);
Marker endMarker = new Marker(new GPSCoordinate(0, 50));
Leg start = new Leg("Start", startMarker, endMarker, 0);
CompoundMark startCompoundMark = new CompoundMark(ORIGIN_COORDS);
CompoundMark endCompoundMark = new CompoundMark(new GPSCoordinate(0, 50));
Leg start = new Leg("Start", startCompoundMark, endCompoundMark, 0);
TEST_BOAT.setCurrentLeg(start);
assertEquals(TEST_BOAT.calculateHeading(), 90, 1e-8);
}
@Test
public void calculateDueSouthHeadingReturns180() {
Marker startMarker = new Marker(ORIGIN_COORDS);
Marker endMarker = new Marker(new GPSCoordinate(-50, 0));
Leg start = new Leg("Start", startMarker, endMarker, 0);
CompoundMark startCompoundMark = new CompoundMark(ORIGIN_COORDS);
CompoundMark endCompoundMark = new CompoundMark(new GPSCoordinate(-50, 0));
Leg start = new Leg("Start", startCompoundMark, endCompoundMark, 0);
TEST_BOAT.setCurrentLeg(start);
assertEquals(TEST_BOAT.calculateHeading(), 180, 1e-8);
}
@Test
public void calculateDueWestHeadingReturns270() {
Marker startMarker = new Marker(ORIGIN_COORDS);
Marker endMarker = new Marker(new GPSCoordinate(0, -50));
Leg start = new Leg("Start", startMarker, endMarker, 0);
CompoundMark startCompoundMark = new CompoundMark(ORIGIN_COORDS);
CompoundMark endCompoundMark = new CompoundMark(new GPSCoordinate(0, -50));
Leg start = new Leg("Start", startCompoundMark, endCompoundMark, 0);
TEST_BOAT.setCurrentLeg(start);
assertEquals(TEST_BOAT.calculateHeading(), 270, 1e-8);
}
@@ -117,16 +117,16 @@ public class BoatInRaceTest {
BoatInRace boat = new BoatInRace("Test", 1, Color.ALICEBLUE, "tt");
// Construct leg of 0 degrees
Marker startMarker = new Marker(ORIGIN_COORDS);
Marker endMarker = new Marker(new GPSCoordinate(50, 0));
Leg leg0deg = new Leg("Start", startMarker, endMarker, 0);
CompoundMark startCompoundMark = new CompoundMark(ORIGIN_COORDS);
CompoundMark endCompoundMark = new CompoundMark(new GPSCoordinate(50, 0));
Leg leg0deg = new Leg("Start", startCompoundMark, endCompoundMark, 0);
boat.setCurrentLeg(leg0deg);
boat.setCurrentPosition(new GPSCoordinate(0, 0));
assertEquals(0, boat.calculateHeading(), 1e-8);
// Construct leg from wake - heading should be 180 degrees
Leg leg180deg = new Leg("Start", startMarker, new Marker(boat.getWake()), 0);
Leg leg180deg = new Leg("Start", startCompoundMark, new CompoundMark(boat.getWake()), 0);
boat.setCurrentLeg(leg180deg);
assertEquals(180, boat.calculateHeading(), 1e-8);
@@ -138,9 +138,9 @@ public class BoatInRaceTest {
BoatInRace boat = new BoatInRace("Test", 10, Color.ALICEBLUE, "tt");
// Construct leg of 0 degrees at 0 N
Marker startMarker = new Marker(ORIGIN_COORDS);
Marker endMarker = new Marker(new GPSCoordinate(50, 0));
Leg leg0deg = new Leg("Start", startMarker, endMarker, 0);
CompoundMark startCompoundMark = new CompoundMark(ORIGIN_COORDS);
CompoundMark endCompoundMark = new CompoundMark(new GPSCoordinate(50, 0));
Leg leg0deg = new Leg("Start", startCompoundMark, endCompoundMark, 0);
boat.setCurrentLeg(leg0deg);
boat.setCurrentPosition(new GPSCoordinate(0, 0));
@@ -8,14 +8,14 @@ import static org.junit.Assert.assertTrue;
/**
* Created by esa46 on 29/03/17.
*/
public class MarkerTest {
public class CompoundMarkTest {
private final GPSCoordinate ORIGIN_COORD = new GPSCoordinate(0, 0);
@Test
public void averageOfSingleMarkAtOriginIsSingleMark() {
Marker testMark = new Marker(ORIGIN_COORD);
CompoundMark testMark = new CompoundMark(ORIGIN_COORD);
assertTrue(testMark.getAverageGPSCoordinate().equals(ORIGIN_COORD));
}
@@ -24,7 +24,7 @@ public class MarkerTest {
public void averageOfSingleMarkIsSingleMark() {
GPSCoordinate testCoord = new GPSCoordinate(20, 25);
Marker testMark = new Marker(testCoord);
CompoundMark testMark = new CompoundMark(testCoord);
assertTrue(testMark.getAverageGPSCoordinate().equals(testCoord));
}
@@ -33,7 +33,7 @@ public class MarkerTest {
public void averageLatOfTwoMarksIsAccurate() {
GPSCoordinate testCoord = new GPSCoordinate(10, 0);
Marker testMark = new Marker(ORIGIN_COORD, testCoord);
CompoundMark testMark = new CompoundMark(ORIGIN_COORD, testCoord);
assertTrue(testMark.getAverageGPSCoordinate().equals(new GPSCoordinate(5, 0)));
}
@@ -41,7 +41,7 @@ public class MarkerTest {
public void averageLongOfTwoMarksIsAccurate() {
GPSCoordinate testCoord = new GPSCoordinate(0, 10);
Marker testMark = new Marker(ORIGIN_COORD, testCoord);
CompoundMark testMark = new CompoundMark(ORIGIN_COORD, testCoord);
assertTrue(testMark.getAverageGPSCoordinate().equals(new GPSCoordinate(0, 5)));
}
@@ -50,7 +50,7 @@ public class MarkerTest {
GPSCoordinate testCoord1 = new GPSCoordinate(10, 30);
GPSCoordinate testCoord2 = new GPSCoordinate(30, 60);
Marker testMark = new Marker(testCoord1, testCoord2);
CompoundMark testMark = new CompoundMark(testCoord1, testCoord2);
assertTrue(testMark.getAverageGPSCoordinate().equals(new GPSCoordinate(020.644102, 44.014817)));
}
@@ -17,8 +17,8 @@
// */
//public class ConstantVelocityRaceTest {
//
// Marker START_MARKER = new Marker(new GPSCoordinate(0, 0));
// Marker END_MARKER = new Marker(new GPSCoordinate(10, 10));
// CompoundMark START_MARKER = new CompoundMark(new GPSCoordinate(0, 0));
// CompoundMark END_MARKER = new CompoundMark(new GPSCoordinate(10, 10));
// Leg START_LEG = new Leg("Start", START_MARKER, END_MARKER, 0);
//
// int ONE_HOUR = 3600000; //1 hour in milliseconds
@@ -14,7 +14,7 @@ import static junit.framework.TestCase.assertEquals;
*/
public class LegTest {
private final Marker ORIGIN_MARKER = new Marker(new GPSCoordinate(0, 0));
private final CompoundMark ORIGIN_CompoundMark = new CompoundMark(new GPSCoordinate(0, 0));
@Test
public void calculateDistanceHandles5nmNorth() {
@@ -22,8 +22,8 @@ public class LegTest {
calc.setStartingGeographicPoint(0, 0);
calc.setDirection(0, 5 * Constants.NMToMetersConversion);
Marker endMarker = getEndMarker(calc.getDestinationGeographicPoint());
Leg test = new Leg("Test", ORIGIN_MARKER, endMarker, 0);
CompoundMark endCompoundMark = getEndMarker(calc.getDestinationGeographicPoint());
Leg test = new Leg("Test", ORIGIN_CompoundMark, endCompoundMark, 0);
assertEquals(test.getDistance(), 5, 1e-8);
}
@@ -33,8 +33,8 @@ public class LegTest {
calc.setStartingGeographicPoint(0, 0);
calc.setDirection(90, 12 * Constants.NMToMetersConversion);
Marker endMarker = getEndMarker(calc.getDestinationGeographicPoint());
Leg test = new Leg("Test", ORIGIN_MARKER, endMarker, 0);
CompoundMark endCompoundMark = getEndMarker(calc.getDestinationGeographicPoint());
Leg test = new Leg("Test", ORIGIN_CompoundMark, endCompoundMark, 0);
assertEquals(test.getDistance(), 12, 1e-8);
}
@@ -44,8 +44,8 @@ public class LegTest {
calc.setStartingGeographicPoint(0, 0);
calc.setDirection(180, 0.5 * Constants.NMToMetersConversion);
Marker endMarker = getEndMarker(calc.getDestinationGeographicPoint());
Leg test = new Leg("Test", ORIGIN_MARKER, endMarker, 0);
CompoundMark endCompoundMark = getEndMarker(calc.getDestinationGeographicPoint());
Leg test = new Leg("Test", ORIGIN_CompoundMark, endCompoundMark, 0);
assertEquals(test.getDistance(), 0.5, 1e-8);
}
@@ -55,23 +55,23 @@ public class LegTest {
calc.setStartingGeographicPoint(0, 0);
calc.setDirection(-90, 0.1 * Constants.NMToMetersConversion);
Marker endMarker = getEndMarker(calc.getDestinationGeographicPoint());
Leg test = new Leg("Test", ORIGIN_MARKER, endMarker, 0);
CompoundMark endCompoundMark = getEndMarker(calc.getDestinationGeographicPoint());
Leg test = new Leg("Test", ORIGIN_CompoundMark, endCompoundMark, 0);
assertEquals(test.getDistance(), 0.1, 1e-8);
}
@Test
public void calculateDistanceHandlesZeroDifference() {
Leg test = new Leg("Test", ORIGIN_MARKER, ORIGIN_MARKER, 0);
Leg test = new Leg("Test", ORIGIN_CompoundMark, ORIGIN_CompoundMark, 0);
assertEquals(test.getDistance(), 0, 1e-8);
}
private Marker getEndMarker(Point2D point) {
private CompoundMark getEndMarker(Point2D point) {
GPSCoordinate coords = new GPSCoordinate(point.getY(), point.getX());
return new Marker(coords);
return new CompoundMark(coords);
}
}
@@ -41,7 +41,7 @@
<leg>
<name>Start to Mark 1</name>
<start>
<marker>
<compoundMark>
<coordinate>
<latitude>32.296577</latitude>
<longitude>-64.854304</longitude>
@@ -50,29 +50,29 @@
<latitude>32.293771</latitude>
<longitude>-64.855242</longitude>
</coordinate>
</marker>
</compoundMark>
</start>
<finish>
<marker>
<compoundMark>
<coordinate>
<latitude>32.293039</latitude>
<longitude>-64.843983</longitude>
</coordinate>
</marker>
</compoundMark>
</finish>
</leg>
<leg>
<name>Mark 1 to Leeward Gate</name>
<start>
<marker>
<compoundMark>
<coordinate>
<latitude>32.293039</latitude>
<longitude>-64.843983</longitude>
</coordinate>
</marker>
</compoundMark>
</start>
<finish>
<marker>
<compoundMark>
<coordinate>
<latitude>32.309693</latitude>
<longitude>-64.835249</longitude>
@@ -81,13 +81,13 @@
<latitude>32.308046</latitude>
<longitude>-64.831785</longitude>
</coordinate>
</marker>
</compoundMark>
</finish>
</leg>
<leg>
<name>Leeward Gate to Windward Gate</name>
<start>
<marker>
<compoundMark>
<coordinate>
<latitude>32.309693</latitude>
<longitude>-64.835249</longitude>
@@ -96,10 +96,10 @@
<latitude>32.308046</latitude>
<longitude>-64.831785</longitude>
</coordinate>
</marker>
</compoundMark>
</start>
<finish>
<marker>
<compoundMark>
<coordinate>
<latitude>32.284680</latitude>
<longitude>-64.850045</longitude>
@@ -108,13 +108,13 @@
<latitude>32.280164</latitude>
<longitude>-64.847591</longitude>
</coordinate>
</marker>
</compoundMark>
</finish>
</leg>
<leg>
<name>Windward Gate to Leeward Gate</name>
<start>
<marker>
<compoundMark>
<coordinate>
<latitude>32.284680</latitude>
<longitude>-64.850045</longitude>
@@ -123,10 +123,10 @@
<latitude>32.280164</latitude>
<longitude>-64.847591</longitude>
</coordinate>
</marker>
</compoundMark>
</start>
<finish>
<marker>
<compoundMark>
<coordinate>
<latitude>32.309693</latitude>
<longitude>-64.835249</longitude>
@@ -135,13 +135,13 @@
<latitude>32.308046</latitude>
<longitude>-64.831785</longitude>
</coordinate>
</marker>
</compoundMark>
</finish>
</leg>
<leg>
<name>Leeward Gate to Finish</name>
<start>
<marker>
<compoundMark>
<coordinate>
<latitude>32.309693</latitude>
<longitude>-64.835249</longitude>
@@ -150,10 +150,10 @@
<latitude>32.308046</latitude>
<longitude>-64.831785</longitude>
</coordinate>
</marker>
</compoundMark>
</start>
<finish>
<marker>
<compoundMark>
<coordinate>
<latitude>32.317379</latitude>
<longitude>-64.839291</longitude>
@@ -162,7 +162,7 @@
<latitude>32.317257</latitude>
<longitude>-64.836260</longitude>
</coordinate>
</marker>
</compoundMark>
</finish>
</leg>
</legs>
@@ -213,7 +213,7 @@
<longitude>-64.849184</longitude>
</coordinate>
</boundaries>
<marker>
<compoundMark>
<name>Start Line</name>
<coordinate>
<latitude>32.296577</latitude>
@@ -223,15 +223,15 @@
<latitude>32.293771</latitude>
<longitude>-64.855242</longitude>
</coordinate>
</marker>
<marker>
</compoundMark>
<compoundMark>
<name>Mark</name>
<coordinate>
<latitude>32.293039</latitude>
<longitude>-64.843983</longitude>
</coordinate>
</marker>
<marker>
</compoundMark>
<compoundMark>
<name>Windward Gate</name>
<coordinate>
<latitude>32.284680</latitude>
@@ -241,8 +241,8 @@
<latitude>32.280164</latitude>
<longitude>-64.847591</longitude>
</coordinate>
</marker>
<marker>
</compoundMark>
<compoundMark>
<name>Leeward Gate</name>
<coordinate>
<latitude>32.309693</latitude>
@@ -252,8 +252,8 @@
<latitude>32.308046</latitude>
<longitude>-64.831785</longitude>
</coordinate>
</marker>
<marker>
</compoundMark>
<compoundMark>
<name>Finish Line</name>
<coordinate>
<latitude>32.317379</latitude>
@@ -263,6 +263,6 @@
<latitude>32.317257</latitude>
<longitude>-64.836260</longitude>
</coordinate>
</marker>
</compoundMark>
</course>
</race>