Merge remote-tracking branch 'origin/master'

This commit is contained in:
Axel Uhl committed 2015-05-01 12:35:12 +02:00
commit 83ea8ba365
4 files changed
+30 -10

No files matched your search

@@ -4,6 +4,23 @@
<div id="mainContent">
<h4 class="articleHeadline">What's New - Strategy Simulator</h4>
<div class="innerContent">
<h5 class="articleSubheadline">April 2015</h5>
<ul class="bulletList">
<li>Algorithm extensions to support extreme wind conditions (or long distance offshore races) where the wind may shift within the full 360 degree range during a leg of the race.</li>
</ul>
<h5 class="articleSubheadline">March 2015</h5>
<ul class="bulletList">
<li>Support race board simulation during a live race</li>
<li>Improved polar data mining including polynomial regression models for beat and jibe angles and speeds dependent on wind speed</li>
</ul>
<h5 class="articleSubheadline">February 2015</h5>
<ul class="bulletList">
<li>Performance improvements due to parallelization of course computations</li>
<li>Caching of race board simulation results for each leg of a race</li>
</ul>
<h5 class="articleSubheadline">October 2014</h5>
<ul class="bulletList">
<li>Simulation is being integrated into the race board (see What's New in Sailing Analytics)</li>
@@ -395,13 +395,13 @@ public class SimulationServiceImpl implements SimulationService {
polarDiagram = null;
// TODO: raise a UI message, to inform user about missing polar data resulting in unability to simulate
}
double simuStepSeconds = startPosition.getDistance(endPosition).getNauticalMiles()
/ ((PolarDiagramGPS) polarDiagram).getAvgSpeed() * 3600 / 100;
Duration simuStep = new MillisecondsDurationImpl(Math.round(simuStepSeconds) * 1000);
SimulationParameters simulationPars = new SimulationParametersImpl(course, startLine, polarDiagram, windField,
simuStep, SailingSimulatorConstants.ModeEvent, true, true, legType);
Map<PathType, Path> paths = null;
if (polarDiagram != null) {
double simuStepSeconds = startPosition.getDistance(endPosition).getNauticalMiles()
/ ((PolarDiagramGPS) polarDiagram).getAvgSpeed() * 3600 / 100;
Duration simuStep = new MillisecondsDurationImpl(Math.round(simuStepSeconds) * 1000);
SimulationParameters simulationPars = new SimulationParametersImpl(course, startLine, polarDiagram,
windField, simuStep, SailingSimulatorConstants.ModeEvent, true, true, legType);
paths = getAllPathsEvenTimed(simulationPars, timeStep.asMillis());
}
// prepare simulator-results
@@ -97,7 +97,7 @@ public class PathGeneratorOpportunistEuclidian360 extends PathGeneratorBase {
// time-step larger than turn-loss is required (this may be removed by
// extended handling of turn-loss)
if (this.parameters.getSimuStep().asMillis() > 2*turnLoss) {
timeStep = this.parameters.getSimuStep().asMillis();
timeStep = this.parameters.getSimuStep().asMillis();
} else {
timeStep = 2*turnLoss;
}
@@ -44,7 +44,10 @@ public class PolarDiagramGPS extends PolarDiagramBase {
windSpeeds.add(new KnotSpeedImpl(12.0));
windSpeeds.add(new KnotSpeedImpl(14.0));
windSpeeds.add(new KnotSpeedImpl(16.0));
windSpeeds.add(new KnotSpeedImpl(18.0));
windSpeeds.add(new KnotSpeedImpl(20.0));
windSpeeds.add(new KnotSpeedImpl(22.0));
windSpeeds.add(new KnotSpeedImpl(24.0));
// initialize beat-angles and -speeds
SpeedWithBearing beatPort;
@@ -100,10 +103,6 @@ public class PolarDiagramGPS extends PolarDiagramBase {
jibeSpeed.add(null);
}
}
if ((beatAngles.size() <= 1)||(beatSpeed.size() <= 1)||(jibeAngles.size() <= 1)||(jibeSpeed.size() <= 1)) {
throw new SparseSimulationDataException();
}
NavigableMap<Speed, NavigableMap<Bearing, Speed>> mapSpeedTable = new TreeMap<Speed, NavigableMap<Bearing, Speed>>();
NavigableMap<Speed, Bearing> mapBeatAngles = new TreeMap<Speed, Bearing>();
@@ -149,6 +148,10 @@ public class PolarDiagramGPS extends PolarDiagramBase {
}
}
if ((mapBeatAngles.size() <= 1)||(mapBeatSOG.size() <= 1)||(mapJibeAngles.size() <= 1)||(mapJibeSOG.size() <= 1)) {
throw new SparseSimulationDataException();
}
super.speedTable = mapSpeedTable;
super.beatAngles = mapBeatAngles;
super.jibeAngles = mapJibeAngles;