mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-04 03:13:49 +00:00
failing test for bug 1952, distance to line outside of orthogonal projection to start line
Change-Id: I1ce55b6952c1f2abf5a7d86ba8b1e6c8470c2ab0
This commit is contained in:
1 parent
65313c591d
commit
01020a504b
1 file changed
+39
-3
+39
-3
@@ -3,19 +3,22 @@ package com.sap.sailing.domain.test;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.Mark;
|
||||
import com.sap.sailing.domain.common.Bearing;
|
||||
import com.sap.sailing.domain.common.Distance;
|
||||
import com.sap.sailing.domain.common.NauticalSide;
|
||||
import com.sap.sailing.domain.common.Position;
|
||||
import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
|
||||
import com.sap.sailing.domain.common.impl.KnotSpeedWithBearingImpl;
|
||||
import com.sap.sailing.domain.common.impl.MeterDistance;
|
||||
import com.sap.sailing.domain.common.tracking.GPSFix;
|
||||
import com.sap.sailing.domain.common.tracking.impl.GPSFixImpl;
|
||||
import com.sap.sailing.domain.common.tracking.impl.GPSFixMovingImpl;
|
||||
import com.sap.sailing.domain.tracking.DynamicGPSFixTrack;
|
||||
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
||||
import com.sap.sailing.domain.tracking.LineDetails;
|
||||
@@ -25,12 +28,14 @@ import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
public class LineAnalysisTest extends TrackBasedTest {
|
||||
private TimePoint now;
|
||||
private DynamicTrackedRace trackedRace;
|
||||
private Competitor competitor;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
final List<Competitor> emptyCompetitorList = Collections.emptyList();
|
||||
competitor = createCompetitor("Test");
|
||||
final Iterable<Competitor> competitorListWithOneCompetitor = Collections.singletonList(competitor);
|
||||
now = MillisecondsTimePoint.now();
|
||||
trackedRace = createTestTrackedRace("Test Regatta", "Test Race", "505", emptyCompetitorList, now, /* useMarkPassingCalculator */ false);
|
||||
trackedRace = createTestTrackedRace("Test Regatta", "Test Race", "505", competitorListWithOneCompetitor, now, /* useMarkPassingCalculator */ false);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -56,6 +61,37 @@ public class LineAnalysisTest extends TrackBasedTest {
|
||||
assertEquals(advantage.getMeters(), finishLine.getAdvantage().getMeters(), 0.1);
|
||||
assertEquals(NauticalSide.PORT, finishLine.getAdvantageousSideWhileApproachingLine());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDistanceToLineWithOrthogonalProjectionOnLine() {
|
||||
Mark left = getMark("Left lee gate buoy");
|
||||
Mark right = getMark("Right lee gate buoy");
|
||||
final Position leftPos = trackedRace.getOrCreateTrack(left).getEstimatedPosition(now, /* extrapolate */ false);
|
||||
final Position rightPos = trackedRace.getOrCreateTrack(right).getEstimatedPosition(now, /* extrapolate */ false);
|
||||
final Bearing lineBearingFromLeftToRight = leftPos.getBearingGreatCircle(rightPos);
|
||||
final Bearing awayFromCourseSideOrthogonalToLine = lineBearingFromLeftToRight.add(new DegreeBearingImpl(90));
|
||||
final Position lineMiddle = leftPos.translateGreatCircle(lineBearingFromLeftToRight, leftPos.getDistance(rightPos).scale(0.5));
|
||||
final Distance distanceBehindLine = new MeterDistance(10);
|
||||
final Position behindMiddleOfLine = lineMiddle.translateGreatCircle(awayFromCourseSideOrthogonalToLine, distanceBehindLine);
|
||||
trackedRace.getTrack(competitor).add(new GPSFixMovingImpl(behindMiddleOfLine, now, new KnotSpeedWithBearingImpl(5, new DegreeBearingImpl(45))));
|
||||
assertEquals(distanceBehindLine.getMeters(), trackedRace.getDistanceToStartLine(competitor, now).getMeters(), 0.000001);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDistanceToLineWithOrthogonalProjectionOutsideLine() {
|
||||
Mark left = getMark("Left lee gate buoy");
|
||||
Mark right = getMark("Right lee gate buoy");
|
||||
final Position leftPos = trackedRace.getOrCreateTrack(left).getEstimatedPosition(now, /* extrapolate */ false);
|
||||
final Position rightPos = trackedRace.getOrCreateTrack(right).getEstimatedPosition(now, /* extrapolate */ false);
|
||||
final Bearing lineBearingFromLeftToRight = leftPos.getBearingGreatCircle(rightPos);
|
||||
final Bearing awayFromCourseSideOrthogonalToLine = lineBearingFromLeftToRight.add(new DegreeBearingImpl(90));
|
||||
final Position outsideOfLine = rightPos.translateGreatCircle(lineBearingFromLeftToRight, new MeterDistance(30)); // 30m right of start boat
|
||||
final Distance distanceBehindLine = new MeterDistance(10);
|
||||
final Position behindOutsideOfLine = outsideOfLine.translateGreatCircle(awayFromCourseSideOrthogonalToLine, distanceBehindLine);
|
||||
trackedRace.getTrack(competitor).add(new GPSFixMovingImpl(behindOutsideOfLine, now, new KnotSpeedWithBearingImpl(5, new DegreeBearingImpl(45))));
|
||||
// the distance is that of the hypotenuse formed by the two cathesuses of 10m and 30m length, respectively:
|
||||
assertEquals(Math.sqrt(10.*10.+30.*30.), trackedRace.getDistanceToStartLine(competitor, now).getMeters(), 0.000001);
|
||||
}
|
||||
|
||||
private Mark getMark(String name) {
|
||||
for (Mark mark : trackedRace.getMarks()) {
|
||||
|
||||
Reference in new issue
Block a user