diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SimulatorServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SimulatorServiceImpl.java index f5da98c6061..fdd924b2c19 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SimulatorServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SimulatorServiceImpl.java @@ -452,6 +452,9 @@ public class SimulatorServiceImpl extends RemoteServiceServlet implements Simula if (isShowLines && seedLines == 'b') { this.getWindLinesFromEndLine(wf, windFieldDTO, startTime, endTime, timeStep); } + + windFieldDTO.curBearing = wf.getWindParameters().curBearing; + windFieldDTO.curSpeed = wf.getWindParameters().curSpeed; return windFieldDTO; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/WindFieldDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/WindFieldDTO.java index 1769e133731..c43b88b61f8 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/WindFieldDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/WindFieldDTO.java @@ -6,6 +6,9 @@ import com.google.gwt.user.client.rpc.IsSerializable; public class WindFieldDTO implements IsSerializable { + public double curSpeed; + public double curBearing; + private List matrix; private WindLinesDTO windLinesDTO; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/windpattern/WindPatternSetting.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/windpattern/WindPatternSetting.java index 59057e322e6..bf8da858818 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/windpattern/WindPatternSetting.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/windpattern/WindPatternSetting.java @@ -20,6 +20,8 @@ public interface WindPatternSetting extends Named { public SettingsType getDefault(); + public int getSteps(); + public List getValues(); public void setValue(Double value); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/windpattern/impl/WindPatternDisplayManagerImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/windpattern/impl/WindPatternDisplayManagerImpl.java index 2d9ac3915a7..ab4353ae8ac 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/windpattern/impl/WindPatternDisplayManagerImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/windpattern/impl/WindPatternDisplayManagerImpl.java @@ -43,47 +43,51 @@ public class WindPatternDisplayManagerImpl implements WindPatternDisplayManager private void addBlastParameters(WindPatternDisplay display) { WindPatternSetting windSpeedSetting = new WindPatternSettingSliderBar("baseWindSpeed", - "Base Speed (kn)", 2, 22, 12); + "Base Speed (kn)", 2, 22, 12,10); display.addSetting(windSpeedSetting); WindPatternSetting blastProbability = new WindPatternSettingSliderBar("blastProbability", - "Probability (%)", 0, 50, 25); + "Probability (%)", 0, 50, 25,10); display.addSetting(blastProbability); WindPatternSetting maxBlastSize = new WindPatternSettingSliderBar("maxBlastSize", "Gust Size", 1, 10, - 1); + 1,10); display.addSetting(maxBlastSize); WindPatternSetting blastWindSpeed = new WindPatternSettingSliderBar("blastWindSpeed", - "Average Speed (%)", 0, 200, 120); + "Average Speed (%)", 0, 200, 120,10); display.addSetting(blastWindSpeed); WindPatternSetting blastWindSpeedVar = new WindPatternSettingSliderBar("blastWindSpeedVar", - "Speed Variance (%)", 1e-4, 100, 10); + "Speed Variance (%)", 1e-4, 100, 10,10); display.addSetting(blastWindSpeedVar); } private void addOscillationParameters(WindPatternDisplay display) { WindPatternSetting windSpeedSetting = new WindPatternSettingSliderBar("baseWindSpeed", - "Base Speed (kn)", 2, 22, 12); + "Base Speed (kn)", 2, 22, 12,10); display.addSetting(windSpeedSetting); - WindPatternSetting baseWindBearing = new WindPatternSettingSliderBar("baseWindBearing", - "Average Direction (Degrees)", -20, 20, 0); + "Average Direction (Degrees)", -20, 20, 0,10); display.addSetting(baseWindBearing); WindPatternSetting leftWindSpeed = new WindPatternSettingSliderBar("leftWindSpeed", - "Speed Left Side (%)", 0, 200, 100); + "Speed Left Side (%)", 0, 200, 100,10); display.addSetting(leftWindSpeed); WindPatternSetting middleWindSpeed = new WindPatternSettingSliderBar("middleWindSpeed", - "Speed Middle (%)", 0, 200, 100); + "Speed Middle (%)", 0, 200, 100,10); display.addSetting(middleWindSpeed); WindPatternSetting rightWindSpeed = new WindPatternSettingSliderBar("rightWindSpeed", - "Speed Right Side (%)", 0, 200, 100); + "Speed Right Side (%)", 0, 200, 100,10); display.addSetting(rightWindSpeed); WindPatternSetting frequency = new WindPatternSettingSliderBar("frequency", - "Frequency (per hr)", 0, 20, 6); + "Frequency (per hr)", 0, 20, 6,10); display.addSetting(frequency); WindPatternSetting amplitude = new WindPatternSettingSliderBar("amplitude", - "Amplitude (Degrees)", -30, 30, 0); + "Amplitude (Degrees)", -30, 30, 0, 10); display.addSetting(amplitude); - + WindPatternSetting curSpeed = new WindPatternSettingSliderBar("curSpeed", + "Current Speed (kn)", 0, 2, 0, 10); + display.addSetting(curSpeed); + WindPatternSetting curBearing = new WindPatternSettingSliderBar("curBearing", + "Current Bearing (Degrees)", 0, 360, 180, 36); + display.addSetting(curBearing); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/windpattern/impl/WindPatternSettingListBox.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/windpattern/impl/WindPatternSettingListBox.java index f9279b7bdb8..cd7c93e710a 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/windpattern/impl/WindPatternSettingListBox.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/windpattern/impl/WindPatternSettingListBox.java @@ -56,6 +56,12 @@ public class WindPatternSettingListBox implements WindPatternSetting, Is return null; } + @Override + public int getSteps() { + // TODO Auto-generated method stub + return 0; + } + @Override public List getValues() { return values; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/windpattern/impl/WindPatternSettingSliderBar.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/windpattern/impl/WindPatternSettingSliderBar.java index c5dbb1f11cc..21ea78e2ef9 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/windpattern/impl/WindPatternSettingSliderBar.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/windpattern/impl/WindPatternSettingSliderBar.java @@ -20,6 +20,7 @@ public class WindPatternSettingSliderBar implements WindPatternSetting, private double min; private double max; private double defaultValue; + private int steps; /** * Required for serialization @@ -28,13 +29,14 @@ public class WindPatternSettingSliderBar implements WindPatternSetting, } - public WindPatternSettingSliderBar(String name, String displayName, double min, double max, double defaultValue) { + public WindPatternSettingSliderBar(String name, String displayName, double min, double max, double defaultValue, int steps) { this.name = name; this.displayName = displayName; this.min = min; this.max = max; this.defaultValue = defaultValue; this.currentValue = defaultValue; + this.steps = steps; } @Override @@ -64,6 +66,11 @@ public class WindPatternSettingSliderBar implements WindPatternSetting, return defaultValue; } + @Override + public int getSteps() { + return steps; + } + @Override public String getName() { return name; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/simulator/PathCanvasOverlay.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/simulator/PathCanvasOverlay.java index b2b59756692..03eccda072b 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/simulator/PathCanvasOverlay.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/simulator/PathCanvasOverlay.java @@ -5,6 +5,7 @@ import java.util.Iterator; import java.util.List; import com.google.gwt.canvas.dom.client.Context2d; +import com.google.gwt.canvas.dom.client.TextMetrics; import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.i18n.client.NumberFormat; import com.google.gwt.i18n.client.TimeZone; @@ -40,10 +41,16 @@ public class PathCanvasOverlay extends WindFieldCanvasOverlay implements Named { private LatLng endPoint; private boolean totalTimeIsGiven = false; private long totalTimeMilliseconds = 0; - + private double curSpeed; + private double curBearing; + + protected String name; public String pathColor = "Green"; + public String textFont = "normal 10pt UbuntuRegular"; + + /** * Whether or not to display the wind directions for the points on the optimal path. */ @@ -87,6 +94,11 @@ public class PathCanvasOverlay extends WindFieldCanvasOverlay implements Named { this.endPoint = endPoint; } + public void setCurrent(double curSpeed, double curBearing) { + this.curSpeed = curSpeed; + this.curBearing = curBearing; + } + /* @Override protected void drawWindField() { @@ -98,6 +110,34 @@ public class PathCanvasOverlay extends WindFieldCanvasOverlay implements Named { @Override protected void drawWindField(final List windDTOList) { + // + // TODO: draw current arrow + // + DegreeBearingImpl curBear = new DegreeBearingImpl(this.curBearing); + + Context2d context2d = canvas.getContext2d(); + + if (this.curSpeed >= 0.0) { + //drawScaledArrow(windDTO, dbi.getRadians(), index, true); + double cFactor = 12.0; + double cWidth = Math.max(1., 1. + (cFactor * PathPolyline.knotsToMetersPerSecond(this.curSpeed) / 3.0)); + double cLength = Math.max(10., 10. + (cFactor * 2. * PathPolyline.knotsToMetersPerSecond(this.curSpeed))); + int cX = 100; + int cY = 150; + if (this.curSpeed > 0.0) { + drawArrowPx(cX, cY, curBear.getRadians(), cLength, cWidth, true, "Green"); + } + + context2d.setFont(textFont); + context2d.setFillStyle(textColor); + + TextMetrics txtmet; + String cText = "Current: " + SimulatorMainPanel.formatSliderValue(curSpeed) + "kn"; + txtmet = context2d.measureText(cText); + final double timewidth = txtmet.getWidth(); + context2d.fillText(cText, cX-(timewidth/2.0), cY-25); + } + final WindFieldGenParamsDTO windParams = new WindFieldGenParamsDTO(); final int numPoints = windDTOList.size(); @@ -125,7 +165,7 @@ public class PathCanvasOverlay extends WindFieldCanvasOverlay implements Named { if (windDTOList != null && windDTOList.size() > 0) { - final Context2d context2d = canvas.getContext2d(); + //final Context2d context2d = canvas.getContext2d(); context2d.setGlobalAlpha(0.8); Iterator windDTOIter = windDTOList.iterator(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/simulator/SimulatorMainPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/simulator/SimulatorMainPanel.java index 59cd2d53739..a417aded735 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/simulator/SimulatorMainPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/simulator/SimulatorMainPanel.java @@ -20,6 +20,7 @@ import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; +import com.google.gwt.i18n.client.NumberFormat; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Button; @@ -119,7 +120,7 @@ public class SimulatorMainPanel extends SplitLayoutPanel { @Override public void onValueChange(final ValueChangeEvent arg0) { - sliderBar.setTitle(String.valueOf(Math.round(sliderBar.getCurrentValue()))); + sliderBar.setTitle(SimulatorMainPanel.formatSliderValue(sliderBar.getCurrentValue())); logger.info("Slider value : " + arg0.getValue()); setting.setValue(arg0.getValue()); if (autoUpdate) { @@ -184,6 +185,10 @@ public class SimulatorMainPanel extends SplitLayoutPanel { } + public static String formatSliderValue(double value) { + return NumberFormat.getFormat("0.0").format(value); + } + public SimulatorMainPanel(final SimulatorServiceAsync svc, final StringMessages stringMessages, final ErrorReporter errorReporter, final int xRes, final int yRes, final boolean autoUpdate, final char mode, final boolean showGrid, final boolean showLines, final char seedLines, final boolean showArrows, final boolean showStreamlets) { @@ -388,8 +393,9 @@ public class SimulatorMainPanel extends SplitLayoutPanel { sliderBar.getElement().getStyle().setProperty("width", "216px"); - sliderBar.setStepSize(Math.round((maxValue - minValue) / 10.), false); - sliderBar.setNumTicks(10); + //sliderBar.setStepSize(Math.round((maxValue - minValue) / 10.), false); + sliderBar.setStepSize(((maxValue - minValue) / ((double)s.getSteps()) ), false); + sliderBar.setNumTicks(s.getSteps()); sliderBar.setNumTickLabels(1); sliderBar.setEnabled(true); @@ -401,11 +407,13 @@ public class SimulatorMainPanel extends SplitLayoutPanel { @Override public String formatLabel(final SliderBar slider, final Double value, final Double previousValue) { return String.valueOf(Math.round(value)); + //return String.valueOf((value)); } }); sliderBar.setCurrentValue(defaultValue); - sliderBar.setTitle(String.valueOf(Math.round(sliderBar.getCurrentValue()))); + //sliderBar.setTitle(String.valueOf(Math.round(sliderBar.getCurrentValue()))); + sliderBar.setTitle(SimulatorMainPanel.formatSliderValue(sliderBar.getCurrentValue())); vp.add(sliderBar); parentPanel.add(vp); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/simulator/SimulatorMap.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/simulator/SimulatorMap.java index ac75763f29f..3158090abbd 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/simulator/SimulatorMap.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/simulator/SimulatorMap.java @@ -148,6 +148,11 @@ public class SimulatorMap extends AbsolutePanel implements RequiresDataInitializ mapw.addOverlay(replayPathCanvasOverlay); replayPathCanvasOverlay.setWindField(pathWindDTO); replayPathCanvasOverlay.setRaceCourse(raceCourseCanvasOverlay.startPoint, raceCourseCanvasOverlay.endPoint); + if (index == 0) { + replayPathCanvasOverlay.setCurrent(result.getWindField().curSpeed,result.getWindField().curBearing); + } else { + replayPathCanvasOverlay.setCurrent(-1.0,0.0); + } replayPathCanvasOverlay.redraw(true); legendCanvasOverlay.setPathOverlays(replayPathCanvasOverlays); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/simulator/WindFieldCanvasOverlay.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/simulator/WindFieldCanvasOverlay.java index dd2693fd786..e5c9225b016 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/simulator/WindFieldCanvasOverlay.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/simulator/WindFieldCanvasOverlay.java @@ -190,19 +190,24 @@ public class WindFieldCanvasOverlay extends FullCanvasOverlay implements TimeLis final LatLng positionLatLng = LatLng.newInstance(position.latDeg, position.lngDeg); final Point canvasPositionInPx = getMap().convertLatLngToDivPixel(positionLatLng); - + final int x = canvasPositionInPx.getX() - this.getWidgetPosLeft(); final int y = canvasPositionInPx.getY() - this.getWidgetPosTop(); windFieldPoints.put(new ToolTip(x, y), windDTO); + drawArrowPx(x, y, angle, length, weight, drawHead, arrowColor); + } + + protected void drawArrowPx(int x, int y, double angle, double length, double weight, boolean drawHead, String color) { + final double dx = length * Math.sin(angle); final double dy = -length * Math.cos(angle); final double x1 = x + dx / 2; final double y1 = y + dy / 2; - drawLine(x - dx / 2, y - dy / 2, x1, y1, weight, arrowColor); + drawLine(x - dx / 2, y - dy / 2, x1, y1, weight, color); final double theta = Math.atan2(-dy, dx); @@ -210,14 +215,14 @@ public class WindFieldCanvasOverlay extends FullCanvasOverlay implements TimeLis logger.finer("headlength: "+hLength+", arrowlength: "+length); if (drawHead) { - drawHead(x1, y1, theta, hLength, weight); + drawHead(x1, y1, theta, hLength, weight, color); } //String text = "P" + index;// + NumberFormat.getFormat("0.00").format(windDTO.trueWindBearingDeg) + "°"; //drawPointWithText(x, y, text); //drawPoint(x, y); } - protected void drawHead(final double x, final double y, final double theta, final double headLength, final double weight) { + protected void drawHead(final double x, final double y, final double theta, final double headLength, final double weight, String color) { double t = theta + (Math.PI / 4); if (t > Math.PI) { @@ -236,8 +241,8 @@ public class WindFieldCanvasOverlay extends FullCanvasOverlay implements TimeLis final double y2 = (y + Math.sin(t2) * headLength); final double x2o = (x + Math.cos(t2) * weight/2); final double y2o = (y - Math.sin(t2) * weight/2); - drawLine(x1o, y1o, x1, y1, weight, arrowHeadColor); - drawLine(x2o, y2o, x2, y2, weight, arrowHeadColor); + drawLine(x1o, y1o, x1, y1, weight, color); + drawLine(x2o, y2o, x2, y2, weight, color); } diff --git a/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/impl/PathGeneratorDynProgForward.java b/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/impl/PathGeneratorDynProgForward.java index 14122b7c86b..d4a336a05cf 100644 --- a/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/impl/PathGeneratorDynProgForward.java +++ b/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/impl/PathGeneratorDynProgForward.java @@ -151,7 +151,7 @@ public class PathGeneratorDynProgForward extends PathGeneratorBase { // grid // steps // Formula: sgridh ~ xscale*sgridv/tan(beatangle*pi/180) - int spatialGridsizeHorizontal = 21*5; //(41-1)*5; //(int) Math.round(2 * + int spatialGridsizeHorizontal = 23*6; //(41-1)*5; //(int) Math.round(2 * // simulationParameters.getProperty("Djikstra.gridh[int]").intValue()); // number // of // horizontal diff --git a/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/impl/PolarDiagramBase.java b/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/impl/PolarDiagramBase.java index 01eef72c4a4..2f0baf496ef 100644 --- a/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/impl/PolarDiagramBase.java +++ b/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/impl/PolarDiagramBase.java @@ -149,7 +149,7 @@ public class PolarDiagramBase implements PolarDiagram { NavigableMap wcurSpeedMap = new TreeMap(); - for(double wcurSpeed=0.0; wcurSpeed<=2.0; wcurSpeed+=0.1) { + for(double wcurSpeed=0.0; wcurSpeed<=2.2; wcurSpeed+=0.1) { NavigableMap wcurBearMap = new TreeMap(); @@ -264,13 +264,12 @@ public class PolarDiagramBase implements PolarDiagram { @Override public void setCurrent(SpeedWithBearing newCurrent) { - + if ((newCurrent == null)&&(extTable == null)) { extTable = this.extendSpeedMap(); } - current = newCurrent; - + current = newCurrent; } @@ -332,7 +331,12 @@ public class PolarDiagramBase implements PolarDiagram { @Override public SpeedWithBearing getSpeedAtBearingOverGround(Bearing bearing) { - if (current == null) { + // TODO: check this new initialization, maybe keep previous current and reset current at end + /*if (extTable == null) { + extTable = this.extendSpeedMap(); + }*/ + + if ((current == null)||(current.getKnots() == 0.0)) { return getSpeedAtBearingRaw(bearing); diff --git a/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/impl/SailingSimulatorImpl.java b/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/impl/SailingSimulatorImpl.java index 6698934dca8..8d66e61b07a 100644 --- a/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/impl/SailingSimulatorImpl.java +++ b/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/impl/SailingSimulatorImpl.java @@ -21,8 +21,10 @@ import java.util.logging.Logger; import org.osgi.framework.FrameworkUtil; +import com.sap.sailing.domain.base.impl.KnotSpeedWithBearingImpl; import com.sap.sailing.domain.base.impl.MeterDistance; import com.sap.sailing.domain.common.Position; +import com.sap.sailing.domain.common.impl.DegreeBearingImpl; import com.sap.sailing.simulator.Boundary; import com.sap.sailing.simulator.Path; import com.sap.sailing.simulator.PathGenerator; @@ -126,9 +128,9 @@ public class SailingSimulatorImpl implements SailingSimulator { logger.info("base wind: "+this.simulationParameters.getBoatPolarDiagram().getWind().getKnots()+" kn, "+((wf.getWindParameters().baseWindBearing)%360.0)+"°"); // set water current - // TODO: nicer initialize of polar diagram interpolate table - //this.simulationParameters.getBoatPolarDiagram().setCurrent(null); // initialize - //this.simulationParameters.getBoatPolarDiagram().setCurrent(new KnotSpeedWithBearingImpl(1.0,new DegreeBearingImpl((wf.getWindParameters().baseWindBearing+90.0)%360.0))); + this.simulationParameters.getBoatPolarDiagram().setCurrent(null); // initialize + //this.simulationParameters.getBoatPolarDiagram().setCurrent(new KnotSpeedWithBearingImpl(0.0,new DegreeBearingImpl((wf.getWindParameters().baseWindBearing+90.0)%360.0))); + this.simulationParameters.getBoatPolarDiagram().setCurrent(new KnotSpeedWithBearingImpl(wf.getWindParameters().curSpeed, new DegreeBearingImpl(wf.getWindParameters().curBearing))); //this.simulationParameters.getBoatPolarDiagram().setCurrent(new KnotSpeedWithBearingImpl(2.0,new DegreeBearingImpl((270.0)%360.0))); if (this.simulationParameters.getBoatPolarDiagram().getCurrent() != null) { logger.info("water current: "+this.simulationParameters.getBoatPolarDiagram().getCurrent().getKnots()+" kn, "+this.simulationParameters.getBoatPolarDiagram().getCurrent().getBearing().getDegrees()+"°"); diff --git a/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/windfield/WindControlParameters.java b/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/windfield/WindControlParameters.java index f0dacf8a548..b1609d6758d 100644 --- a/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/windfield/WindControlParameters.java +++ b/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/windfield/WindControlParameters.java @@ -19,6 +19,17 @@ public class WindControlParameters implements Serializable { * Value range 0 to 360 degrees */ public Double baseWindBearing; + + /** + * Base wind speed in knots + * Value range 0 to 30 + */ + public Double curSpeed; + /** + * Base average wind direction in degrees + * Value range 0 to 360 degrees + */ + public Double curBearing; /** * Oscillation parameter frequency @@ -106,6 +117,9 @@ public class WindControlParameters implements Serializable { baseWindSpeed = 12.0; + curSpeed = 0.0; + curBearing = 0.0; + baseWindBearing = 0.0; frequency = 0.0; //30.0; amplitude = 15.0;