mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-17 01:31:01 +00:00
WindControlParametes moved to server side, client using WindPatternDisplay to set the settings.
This commit is contained in:
1 parent
7daa8b1380
commit
8da0ab4a43
12 files changed
+94
-91
No files matched your search
+6
-5
@@ -30,12 +30,12 @@ import com.sap.sailing.gwt.ui.shared.windpattern.WindPatternDisplay;
|
||||
import com.sap.sailing.gwt.ui.shared.windpattern.WindPatternDisplayManager;
|
||||
import com.sap.sailing.gwt.ui.shared.windpattern.WindPatternDisplayManager.WindPattern;
|
||||
import com.sap.sailing.gwt.ui.shared.windpattern.WindPatternSetting;
|
||||
import com.sap.sailing.gwt.ui.simulator.WindControlParameters;
|
||||
import com.sap.sailing.simulator.Path;
|
||||
import com.sap.sailing.simulator.PolarDiagram;
|
||||
import com.sap.sailing.simulator.SailingSimulator;
|
||||
import com.sap.sailing.simulator.SimulationParameters;
|
||||
import com.sap.sailing.simulator.TimedPositionWithSpeed;
|
||||
import com.sap.sailing.simulator.WindControlParameters;
|
||||
import com.sap.sailing.simulator.WindField;
|
||||
import com.sap.sailing.simulator.impl.PolarDiagramImpl;
|
||||
import com.sap.sailing.simulator.impl.RectangularBoundary;
|
||||
@@ -172,8 +172,8 @@ public class SimulatorServiceImpl extends RemoteServiceServlet implements Simula
|
||||
List<Position> lattice = bd.extractLattice(params.getxRes(), params.getyRes());
|
||||
retreiveWindControlParameters(pattern);
|
||||
|
||||
KnotSpeedImpl knotSpeedImpl = new KnotSpeedImpl(controlParameters.speed);
|
||||
WindField wf = new WindFieldImpl(bd, knotSpeedImpl.getKilometersPerHour(), bd.getSouth().getDegrees());
|
||||
controlParameters.windBearing = bd.getSouth().getDegrees();
|
||||
WindField wf = new WindFieldImpl(bd, controlParameters);
|
||||
|
||||
List<WindDTO> wList = new ArrayList<WindDTO>();
|
||||
|
||||
@@ -206,8 +206,9 @@ public class SimulatorServiceImpl extends RemoteServiceServlet implements Simula
|
||||
|
||||
RectangularBoundary bd = new RectangularBoundary(nw, se);
|
||||
retreiveWindControlParameters(pattern);
|
||||
KnotSpeedImpl knotSpeedImpl = new KnotSpeedImpl(controlParameters.speed);
|
||||
WindField wf = new WindFieldImpl(bd, knotSpeedImpl.getKilometersPerHour(), bd.getSouth().getDegrees());
|
||||
|
||||
controlParameters.windBearing = bd.getSouth().getDegrees();
|
||||
WindField wf = new WindFieldImpl(bd, controlParameters);
|
||||
|
||||
|
||||
//TODO Get all the paths that need to be displayed
|
||||
|
||||
+2
@@ -28,4 +28,6 @@ public interface WindPatternSetting<SettingsType> extends Named {
|
||||
|
||||
public SettingsType getValue();
|
||||
|
||||
public String getDisplayName();
|
||||
|
||||
}
|
||||
+3
-3
@@ -28,16 +28,16 @@ public class WindPatternDisplayManagerImpl implements WindPatternDisplayManager
|
||||
@Override
|
||||
public WindPatternDisplay getDisplay(WindPattern windPattern) {
|
||||
WindPatternDisplay display = new WindPatternDisplayImpl();
|
||||
WindPatternSetting<Double> windSpeedSetting = new WindPatternSettingSliderBar("speed", 1,10,1);
|
||||
WindPatternSetting<Double> windSpeedSetting = new WindPatternSettingSliderBar("baseSpeed", "Base Wind Speed", 1,10,1);
|
||||
display.addSetting(windSpeedSetting);
|
||||
|
||||
switch(windPattern) {
|
||||
case BLASTS :
|
||||
break;
|
||||
case OSCILLATIONS :
|
||||
WindPatternSetting<Double> noise = new WindPatternSettingSliderBar("noise", 0,1,0);
|
||||
WindPatternSetting<Double> noise = new WindPatternSettingSliderBar("noise", "Noise", 0,1,0);
|
||||
display.addSetting(noise);
|
||||
WindPatternSetting<String> names = new WindPatternSettingListBox("names");
|
||||
WindPatternSetting<String> names = new WindPatternSettingListBox("names", "Names");
|
||||
names.getValues().add("A");
|
||||
names.getValues().add("B");
|
||||
display.addSetting(names);
|
||||
|
||||
+11
-1
@@ -12,7 +12,11 @@ public class WindPatternSettingListBox implements WindPatternSetting<String>, Is
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 5396311857725053774L;
|
||||
/**
|
||||
* name should match the corresponding field name from @WindControlParameters for which this control is being set
|
||||
*/
|
||||
private String name;
|
||||
private String displayName;
|
||||
private String currentValue;
|
||||
private List<String> values;
|
||||
|
||||
@@ -23,8 +27,9 @@ public class WindPatternSettingListBox implements WindPatternSetting<String>, Is
|
||||
|
||||
}
|
||||
|
||||
public WindPatternSettingListBox(String name) {
|
||||
public WindPatternSettingListBox(String name, String displayName) {
|
||||
this.name = name;
|
||||
this.displayName = displayName;
|
||||
this.values = new ArrayList<String>();
|
||||
}
|
||||
|
||||
@@ -83,4 +88,9 @@ public class WindPatternSettingListBox implements WindPatternSetting<String>, Is
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDisplayName() {
|
||||
return displayName;
|
||||
}
|
||||
}
|
||||
+19
-8
@@ -11,21 +11,26 @@ public class WindPatternSettingSliderBar implements WindPatternSetting<Double>,
|
||||
* Generated serial version UID
|
||||
*/
|
||||
private static final long serialVersionUID = 2817622009812937399L;
|
||||
/**
|
||||
* name should match the corresponding field name from @WindControlParameters for which this control is being set
|
||||
*/
|
||||
private String name;
|
||||
private String displayName;
|
||||
private double currentValue;
|
||||
private double min;
|
||||
private double max;
|
||||
private double defaultValue;
|
||||
|
||||
|
||||
/**
|
||||
* Required for serialization
|
||||
*/
|
||||
public WindPatternSettingSliderBar() {
|
||||
|
||||
|
||||
}
|
||||
|
||||
public WindPatternSettingSliderBar(String name, double min, double max, double defaultValue) {
|
||||
|
||||
public WindPatternSettingSliderBar(String name, String displayName, double min, double max, double defaultValue) {
|
||||
this.name = name;
|
||||
this.displayName = displayName;
|
||||
this.min = min;
|
||||
this.max = max;
|
||||
this.defaultValue = defaultValue;
|
||||
@@ -66,14 +71,15 @@ public class WindPatternSettingSliderBar implements WindPatternSetting<Double>,
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return getName() + " " + getDisplayWidgetType() + " Min:" + getMin() + " Max: " + getMax() + " Default:" + getDefault();
|
||||
return getName() + " " + getDisplayWidgetType() + " Min:" + getMin() + " Max: " + getMax() + " Default:"
|
||||
+ getDefault();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setValue(Double value) {
|
||||
this.currentValue = value;
|
||||
|
||||
this.currentValue = value;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -84,6 +90,11 @@ public class WindPatternSettingSliderBar implements WindPatternSetting<Double>,
|
||||
@Override
|
||||
public void setValue(String value) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDisplayName() {
|
||||
return displayName;
|
||||
}
|
||||
}
|
||||
+7
-9
@@ -57,7 +57,6 @@ public class SimulatorMainPanel extends SplitLayoutPanel {
|
||||
private RadioButton windDisplayButton;
|
||||
private TimePanel<TimePanelSettings> timePanel;
|
||||
|
||||
private WindControlParameters wControls;
|
||||
private Map<String, WindPatternDisplay> patternDisplayMap;
|
||||
private Map<String, Panel> patternPanelMap;
|
||||
|
||||
@@ -158,7 +157,6 @@ public class SimulatorMainPanel extends SplitLayoutPanel {
|
||||
|
||||
leftPanel = new FlowPanel();
|
||||
rightPanel = new FlowPanel();
|
||||
wControls = new WindControlParameters(1, 0);
|
||||
patternSelector = new ListBox();
|
||||
patternSelector.addChangeHandler(new PatternSelectorHandler());
|
||||
patternNameDTOMap = new HashMap<String, WindPatternDTO>();
|
||||
@@ -267,7 +265,7 @@ public class SimulatorMainPanel extends SplitLayoutPanel {
|
||||
for (WindPatternSetting<?> s : currentWPDisplay.getSettings()) {
|
||||
switch (s.getDisplayWidgetType()) {
|
||||
case SLIDERBAR:
|
||||
Panel sliderPanel = getSliderPanel(windControlPanel, s.getName(), (Double) s.getMin(), (Double) s.getMax(),
|
||||
Panel sliderPanel = getSliderPanel(windControlPanel, s.getDisplayName(), (Double) s.getMin(), (Double) s.getMax(),
|
||||
(Double) s.getDefault(), new WindControlCapture(s));
|
||||
//windControlPanel.add(sliderPanel);
|
||||
//sliderPanel.getElement().getStyle().setFloat(Style.Float.NONE);
|
||||
@@ -421,13 +419,13 @@ public class SimulatorMainPanel extends SplitLayoutPanel {
|
||||
|
||||
if (windDisplayButton.getValue()) {
|
||||
timePanel.setVisible(true);
|
||||
simulatorMap.refreshView(SimulatorMap.ViewName.WINDDISPLAY, wControls, currentWPDisplay);
|
||||
simulatorMap.refreshView(SimulatorMap.ViewName.WINDDISPLAY, currentWPDisplay);
|
||||
} else if (summaryButton.getValue()) {
|
||||
timePanel.setVisible(false);
|
||||
simulatorMap.refreshView(SimulatorMap.ViewName.SUMMARY, wControls, currentWPDisplay);
|
||||
simulatorMap.refreshView(SimulatorMap.ViewName.SUMMARY, currentWPDisplay);
|
||||
} else if (replayButton.getValue()) {
|
||||
timePanel.setVisible(true);
|
||||
simulatorMap.refreshView(SimulatorMap.ViewName.REPLAY, wControls, currentWPDisplay);
|
||||
simulatorMap.refreshView(SimulatorMap.ViewName.REPLAY, currentWPDisplay);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -453,7 +451,7 @@ public class SimulatorMainPanel extends SplitLayoutPanel {
|
||||
@Override
|
||||
public void onClick(ClickEvent arg0) {
|
||||
timePanel.setVisible(false);
|
||||
simulatorMap.refreshView(SimulatorMap.ViewName.SUMMARY, wControls, currentWPDisplay);
|
||||
simulatorMap.refreshView(SimulatorMap.ViewName.SUMMARY, currentWPDisplay);
|
||||
}
|
||||
|
||||
});
|
||||
@@ -466,7 +464,7 @@ public class SimulatorMainPanel extends SplitLayoutPanel {
|
||||
public void onClick(ClickEvent arg0) {
|
||||
resetTimer();
|
||||
timePanel.setVisible(true);
|
||||
simulatorMap.refreshView(SimulatorMap.ViewName.REPLAY, wControls, currentWPDisplay);
|
||||
simulatorMap.refreshView(SimulatorMap.ViewName.REPLAY, currentWPDisplay);
|
||||
}
|
||||
|
||||
});
|
||||
@@ -479,7 +477,7 @@ public class SimulatorMainPanel extends SplitLayoutPanel {
|
||||
public void onClick(ClickEvent arg0) {
|
||||
resetTimer();
|
||||
timePanel.setVisible(true);
|
||||
simulatorMap.refreshView(SimulatorMap.ViewName.WINDDISPLAY, wControls, currentWPDisplay);
|
||||
simulatorMap.refreshView(SimulatorMap.ViewName.WINDDISPLAY, currentWPDisplay);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
+13
-13
@@ -115,7 +115,7 @@ public class SimulatorMap extends AbsolutePanel implements RequiresDataInitializ
|
||||
overlaysInitialized = true;
|
||||
}
|
||||
|
||||
private void generateWindField(final WindControlParameters wControls, WindPatternDisplay windPatternDisplay) {
|
||||
private void generateWindField(WindPatternDisplay windPatternDisplay) {
|
||||
logger.info("In generateWindField");
|
||||
|
||||
PositionDTO startPointDTO = new PositionDTO(raceCourseCanvasOverlay.startPoint.getLatitude(),
|
||||
@@ -148,7 +148,7 @@ public class SimulatorMap extends AbsolutePanel implements RequiresDataInitializ
|
||||
windFieldCanvasOverlay.redraw(true);
|
||||
}
|
||||
|
||||
private void generatePath(final WindControlParameters wControls, WindPatternDisplay windPatternDisplay, final boolean display) {
|
||||
private void generatePath(WindPatternDisplay windPatternDisplay, final boolean display) {
|
||||
logger.info("In generatePath");
|
||||
|
||||
PositionDTO startPointDTO = new PositionDTO(raceCourseCanvasOverlay.startPoint.getLatitude(),
|
||||
@@ -203,32 +203,32 @@ public class SimulatorMap extends AbsolutePanel implements RequiresDataInitializ
|
||||
raceCourseCanvasOverlay.redraw(true);
|
||||
}
|
||||
|
||||
private void refreshSummaryView(WindControlParameters wControls, WindPatternDisplay windPatternDisplay) {
|
||||
private void refreshSummaryView(WindPatternDisplay windPatternDisplay) {
|
||||
mapw.removeOverlay(windFieldCanvasOverlay);
|
||||
mapw.removeOverlay(replayPathCanvasOverlay);
|
||||
pathCanvasOverlay.displayWindAlongPath = true;
|
||||
mapw.addOverlay(pathCanvasOverlay);
|
||||
generatePath(wControls, windPatternDisplay, true);
|
||||
generatePath(windPatternDisplay, true);
|
||||
// pathCanvasOverlay.redraw(true);
|
||||
}
|
||||
|
||||
private void refreshReplayView(WindControlParameters wControls, WindPatternDisplay windPatternDisplay) {
|
||||
private void refreshReplayView(WindPatternDisplay windPatternDisplay) {
|
||||
mapw.removeOverlay(pathCanvasOverlay);
|
||||
mapw.addOverlay(windFieldCanvasOverlay);
|
||||
replayPathCanvasOverlay.displayWindAlongPath = false;
|
||||
mapw.addOverlay(replayPathCanvasOverlay);
|
||||
generateWindField(wControls, windPatternDisplay);
|
||||
generatePath(wControls, windPatternDisplay, false);
|
||||
generateWindField(windPatternDisplay);
|
||||
generatePath(windPatternDisplay, false);
|
||||
}
|
||||
|
||||
private void refreshWindDisplayView(WindControlParameters wControls, WindPatternDisplay windPatternDisplay) {
|
||||
private void refreshWindDisplayView(WindPatternDisplay windPatternDisplay) {
|
||||
mapw.removeOverlay(pathCanvasOverlay);
|
||||
mapw.removeOverlay(replayPathCanvasOverlay);
|
||||
mapw.addOverlay(windFieldCanvasOverlay);
|
||||
generateWindField(wControls, windPatternDisplay);
|
||||
generateWindField(windPatternDisplay);
|
||||
}
|
||||
|
||||
public void refreshView(ViewName name, WindControlParameters wControls, WindPatternDisplay windPatternDisplay) {
|
||||
public void refreshView(ViewName name, WindPatternDisplay windPatternDisplay) {
|
||||
if (!overlaysInitialized) {
|
||||
initializeOverlays();
|
||||
}
|
||||
@@ -237,13 +237,13 @@ public class SimulatorMap extends AbsolutePanel implements RequiresDataInitializ
|
||||
raceCourseCanvasOverlay.setSelected(false);
|
||||
switch (name) {
|
||||
case SUMMARY:
|
||||
refreshSummaryView(wControls, windPatternDisplay);
|
||||
refreshSummaryView(windPatternDisplay);
|
||||
break;
|
||||
case REPLAY:
|
||||
refreshReplayView(wControls, windPatternDisplay);
|
||||
refreshReplayView(windPatternDisplay);
|
||||
break;
|
||||
case WINDDISPLAY:
|
||||
refreshWindDisplayView(wControls, windPatternDisplay);
|
||||
refreshWindDisplayView(windPatternDisplay);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
-14
@@ -1,14 +0,0 @@
|
||||
package com.sap.sailing.gwt.ui.simulator;
|
||||
|
||||
|
||||
public class WindControlParameters {
|
||||
public Double speed;
|
||||
public double windSpeedInKnots;
|
||||
public double windBearing;
|
||||
|
||||
public WindControlParameters(double speedInKnots, double bearing) {
|
||||
speed = speedInKnots;
|
||||
windSpeedInKnots = speedInKnots;
|
||||
windBearing = bearing;
|
||||
}
|
||||
}
|
||||
+7
-3
@@ -12,12 +12,14 @@ import com.sap.sailing.domain.common.Distance;
|
||||
import com.sap.sailing.domain.common.Position;
|
||||
import com.sap.sailing.domain.common.Speed;
|
||||
import com.sap.sailing.domain.common.impl.DegreePosition;
|
||||
import com.sap.sailing.domain.common.impl.KilometersPerHourSpeedImpl;
|
||||
import com.sap.sailing.simulator.Boundary;
|
||||
import com.sap.sailing.simulator.Path;
|
||||
import com.sap.sailing.simulator.PolarDiagram;
|
||||
import com.sap.sailing.simulator.SailingSimulator;
|
||||
import com.sap.sailing.simulator.SimulationParameters;
|
||||
import com.sap.sailing.simulator.TimedPositionWithSpeed;
|
||||
import com.sap.sailing.simulator.WindControlParameters;
|
||||
import com.sap.sailing.simulator.WindField;
|
||||
import com.sap.sailing.simulator.impl.PolarDiagramImpl;
|
||||
import com.sap.sailing.simulator.impl.RectangularBoundary;
|
||||
@@ -40,8 +42,9 @@ public class SimulatorTest {
|
||||
course.add(end);
|
||||
PolarDiagram pd = new PolarDiagramImpl(0);
|
||||
RectangularBoundary bd = new RectangularBoundary(start, end);
|
||||
|
||||
WindField wf = new WindFieldImpl(bd, 7.2, 45);
|
||||
KilometersPerHourSpeedImpl kmhrSpeed = new KilometersPerHourSpeedImpl(7.2);
|
||||
WindControlParameters windParameters = new WindControlParameters(kmhrSpeed.getKnots(), 45);
|
||||
WindField wf = new WindFieldImpl(bd, windParameters);
|
||||
SimulationParameters param = new SimulationParametersImpl(course, pd, wf);
|
||||
|
||||
SailingSimulatorImpl sailingSim = new SailingSimulatorImpl(param);
|
||||
@@ -68,7 +71,8 @@ public class SimulatorTest {
|
||||
|
||||
// I am creating the WindField such as the course goes mainly against the wind (as it should)
|
||||
// and the speed of the wind would go over the course in 10 minutes (for the sake of the running time)
|
||||
WindField wf = new WindFieldImpl(b, requiredSpeed10.getKilometersPerHour(), b.getSouth().getDegrees());
|
||||
WindControlParameters windParameters = new WindControlParameters(requiredSpeed10.getKnots(), b.getSouth().getDegrees());
|
||||
WindField wf = new WindFieldImpl(b, windParameters);
|
||||
PolarDiagram pd = new PolarDiagramImpl(1);
|
||||
List<Position> course = new ArrayList<Position>();
|
||||
course.add(p1);
|
||||
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
package com.sap.sailing.simulator;
|
||||
|
||||
|
||||
public class WindControlParameters {
|
||||
/**
|
||||
* Base wind speed in knots
|
||||
*/
|
||||
public Double baseSpeed;
|
||||
/**
|
||||
* Base average wind direction in degrees
|
||||
*/
|
||||
public Double windBearing;
|
||||
|
||||
public WindControlParameters(double speedInKnots, double bearing) {
|
||||
baseSpeed = speedInKnots;
|
||||
windBearing = bearing;
|
||||
}
|
||||
}
|
||||
-28
@@ -124,32 +124,4 @@ public class SailingSimulatorImpl implements SailingSimulator {
|
||||
return new PathImpl(lst);
|
||||
}
|
||||
|
||||
//SailingSimulator roundtrip
|
||||
public static void main(String args[]) {
|
||||
Position p1 = new DegreePosition(25.661333,-90.752563);
|
||||
Position p2 = new DegreePosition(24.522137,-90.774536);
|
||||
|
||||
Boundary b = new RectangularBoundary(p1, p2);
|
||||
|
||||
Distance dist = p1.getDistance(p2);
|
||||
//the Speed required to go from p1 to p2 in 10 minutes
|
||||
Speed requiredSpeed10 = dist.inTime(600000);
|
||||
|
||||
//I am creating the WindField such as the course goes mainly against the wind (as it should)
|
||||
//and the speed of the wind would go over the course in 10 minutes (for the sake of the running time)
|
||||
WindField wf = new WindFieldImpl(b, requiredSpeed10.getKilometersPerHour(), b.getSouth().getDegrees());
|
||||
PolarDiagram pd = new PolarDiagramImpl(1);
|
||||
List<Position> course= new ArrayList<Position>();
|
||||
course.add(p1);
|
||||
course.add(p2);
|
||||
SimulationParameters sp = new SimulationParametersImpl(course, pd, wf);
|
||||
SailingSimulator solver = new SailingSimulatorImpl(sp);
|
||||
|
||||
Path pth = solver.getOptimumPath();
|
||||
|
||||
for(TimedPositionWithSpeed p : pth.getPathPoints()) {
|
||||
System.out.println("Position: " + p.getPosition() + " Wind: " + wf.getWind(new TimedPositionWithSpeedSimple(p.getPosition())));
|
||||
}
|
||||
//the null in the Wind output is the timestamp - this Wind is time-invariant!
|
||||
}
|
||||
}
|
||||
+8
-7
@@ -2,32 +2,33 @@ package com.sap.sailing.simulator.impl;
|
||||
|
||||
import com.sap.sailing.domain.base.SpeedWithBearing;
|
||||
import com.sap.sailing.domain.base.impl.KilometersPerHourSpeedWithBearingImpl;
|
||||
import com.sap.sailing.domain.base.impl.KnotSpeedImpl;
|
||||
import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
|
||||
import com.sap.sailing.domain.tracking.Wind;
|
||||
import com.sap.sailing.domain.tracking.impl.WindImpl;
|
||||
import com.sap.sailing.simulator.Boundary;
|
||||
import com.sap.sailing.simulator.TimedPosition;
|
||||
import com.sap.sailing.simulator.WindControlParameters;
|
||||
import com.sap.sailing.simulator.WindField;
|
||||
|
||||
public class WindFieldImpl implements WindField {
|
||||
|
||||
double windSpeed;
|
||||
double windBearing;
|
||||
protected WindControlParameters windParameters;
|
||||
protected Boundary boundary;
|
||||
|
||||
public WindFieldImpl(Boundary b, double windspeed, double bearing)
|
||||
public WindFieldImpl(Boundary b, WindControlParameters parameters)
|
||||
{
|
||||
boundary = b;
|
||||
windSpeed = windspeed;
|
||||
windBearing = bearing;
|
||||
windParameters = parameters;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Wind getWind(TimedPosition coordinates) {
|
||||
KnotSpeedImpl knotSpeedImpl = new KnotSpeedImpl(windParameters.baseSpeed);
|
||||
|
||||
double wBearing = windBearing *
|
||||
double wBearing = windParameters.windBearing *
|
||||
(1 + coordinates.getPosition().getDistance(boundary.getCorners().get("NorthWest")).getMeters()/boundary.getHeight().getMeters());
|
||||
SpeedWithBearing wspeed = new KilometersPerHourSpeedWithBearingImpl(windSpeed, new DegreeBearingImpl(wBearing));
|
||||
SpeedWithBearing wspeed = new KilometersPerHourSpeedWithBearingImpl(knotSpeedImpl.getKilometersPerHour(), new DegreeBearingImpl(wBearing));
|
||||
|
||||
return new WindImpl(coordinates.getPosition(),coordinates.getTimePoint(), wspeed);
|
||||
|
||||
|
||||
Reference in new issue
Block a user