mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-15 16:51:07 +00:00
extend slider for individual number of steps and floating point stepsize, e.g. 0.1; add arrow on PathCanvasOverlay for water current
This commit is contained in:
1 parent
edea89901e
commit
ef65da4c2a
14 files changed
+139
-36
No files matched your search
+3
@@ -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;
|
||||
}
|
||||
|
||||
+3
@@ -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<SimulatorWindDTO> matrix;
|
||||
|
||||
private WindLinesDTO windLinesDTO;
|
||||
|
||||
+2
@@ -20,6 +20,8 @@ public interface WindPatternSetting<SettingsType> extends Named {
|
||||
|
||||
public SettingsType getDefault();
|
||||
|
||||
public int getSteps();
|
||||
|
||||
public List<SettingsType> getValues();
|
||||
|
||||
public void setValue(Double value);
|
||||
|
||||
+18
-14
@@ -43,47 +43,51 @@ public class WindPatternDisplayManagerImpl implements WindPatternDisplayManager
|
||||
|
||||
private void addBlastParameters(WindPatternDisplay display) {
|
||||
WindPatternSetting<Double> windSpeedSetting = new WindPatternSettingSliderBar("baseWindSpeed",
|
||||
"Base Speed (kn)", 2, 22, 12);
|
||||
"Base Speed (kn)", 2, 22, 12,10);
|
||||
display.addSetting(windSpeedSetting);
|
||||
|
||||
WindPatternSetting<Double> blastProbability = new WindPatternSettingSliderBar("blastProbability",
|
||||
"Probability (%)", 0, 50, 25);
|
||||
"Probability (%)", 0, 50, 25,10);
|
||||
display.addSetting(blastProbability);
|
||||
WindPatternSetting<Double> maxBlastSize = new WindPatternSettingSliderBar("maxBlastSize", "Gust Size", 1, 10,
|
||||
1);
|
||||
1,10);
|
||||
display.addSetting(maxBlastSize);
|
||||
WindPatternSetting<Double> blastWindSpeed = new WindPatternSettingSliderBar("blastWindSpeed",
|
||||
"Average Speed (%)", 0, 200, 120);
|
||||
"Average Speed (%)", 0, 200, 120,10);
|
||||
display.addSetting(blastWindSpeed);
|
||||
WindPatternSetting<Double> 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<Double> windSpeedSetting = new WindPatternSettingSliderBar("baseWindSpeed",
|
||||
"Base Speed (kn)", 2, 22, 12);
|
||||
"Base Speed (kn)", 2, 22, 12,10);
|
||||
display.addSetting(windSpeedSetting);
|
||||
|
||||
WindPatternSetting<Double> baseWindBearing = new WindPatternSettingSliderBar("baseWindBearing",
|
||||
"Average Direction (Degrees)", -20, 20, 0);
|
||||
"Average Direction (Degrees)", -20, 20, 0,10);
|
||||
display.addSetting(baseWindBearing);
|
||||
WindPatternSetting<Double> leftWindSpeed = new WindPatternSettingSliderBar("leftWindSpeed",
|
||||
"Speed Left Side (%)", 0, 200, 100);
|
||||
"Speed Left Side (%)", 0, 200, 100,10);
|
||||
display.addSetting(leftWindSpeed);
|
||||
WindPatternSetting<Double> middleWindSpeed = new WindPatternSettingSliderBar("middleWindSpeed",
|
||||
"Speed Middle (%)", 0, 200, 100);
|
||||
"Speed Middle (%)", 0, 200, 100,10);
|
||||
display.addSetting(middleWindSpeed);
|
||||
WindPatternSetting<Double> rightWindSpeed = new WindPatternSettingSliderBar("rightWindSpeed",
|
||||
"Speed Right Side (%)", 0, 200, 100);
|
||||
"Speed Right Side (%)", 0, 200, 100,10);
|
||||
display.addSetting(rightWindSpeed);
|
||||
WindPatternSetting<Double> frequency = new WindPatternSettingSliderBar("frequency",
|
||||
"Frequency (per hr)", 0, 20, 6);
|
||||
"Frequency (per hr)", 0, 20, 6,10);
|
||||
display.addSetting(frequency);
|
||||
WindPatternSetting<Double> amplitude = new WindPatternSettingSliderBar("amplitude",
|
||||
"Amplitude (Degrees)", -30, 30, 0);
|
||||
"Amplitude (Degrees)", -30, 30, 0, 10);
|
||||
display.addSetting(amplitude);
|
||||
|
||||
WindPatternSetting<Double> curSpeed = new WindPatternSettingSliderBar("curSpeed",
|
||||
"Current Speed (kn)", 0, 2, 0, 10);
|
||||
display.addSetting(curSpeed);
|
||||
WindPatternSetting<Double> curBearing = new WindPatternSettingSliderBar("curBearing",
|
||||
"Current Bearing (Degrees)", 0, 360, 180, 36);
|
||||
display.addSetting(curBearing);
|
||||
}
|
||||
|
||||
}
|
||||
+6
@@ -56,6 +56,12 @@ public class WindPatternSettingListBox implements WindPatternSetting<String>, Is
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSteps() {
|
||||
// TODO Auto-generated method stub
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getValues() {
|
||||
return values;
|
||||
|
||||
+8
-1
@@ -20,6 +20,7 @@ public class WindPatternSettingSliderBar implements WindPatternSetting<Double>,
|
||||
private double min;
|
||||
private double max;
|
||||
private double defaultValue;
|
||||
private int steps;
|
||||
|
||||
/**
|
||||
* Required for serialization
|
||||
@@ -28,13 +29,14 @@ public class WindPatternSettingSliderBar implements WindPatternSetting<Double>,
|
||||
|
||||
}
|
||||
|
||||
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<Double>,
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSteps() {
|
||||
return steps;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return name;
|
||||
|
||||
+42
-2
@@ -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<SimulatorWindDTO> 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<SimulatorWindDTO> windDTOIter = windDTOList.iterator();
|
||||
|
||||
+12
-4
@@ -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<Double> 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);
|
||||
|
||||
+5
@@ -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);
|
||||
|
||||
|
||||
+11
-6
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
+9
-5
@@ -149,7 +149,7 @@ public class PolarDiagramBase implements PolarDiagram {
|
||||
|
||||
NavigableMap<Double,Object> wcurSpeedMap = new TreeMap<Double,Object>();
|
||||
|
||||
for(double wcurSpeed=0.0; wcurSpeed<=2.0; wcurSpeed+=0.1) {
|
||||
for(double wcurSpeed=0.0; wcurSpeed<=2.2; wcurSpeed+=0.1) {
|
||||
|
||||
NavigableMap<Double,Object> wcurBearMap = new TreeMap<Double,Object>();
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
+5
-3
@@ -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()+"°");
|
||||
|
||||
+14
@@ -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;
|
||||
|
||||
Reference in new issue
Block a user