From 1a7429d81c55a0c4c6d8a1421d4cca8e4f8b4879 Mon Sep 17 00:00:00 2001 From: "Christopher Ronnewinkel (D036654)" Date: Fri, 8 Jun 2012 10:29:39 +0200 Subject: [PATCH] Fixes of wind field and UI --- .../ui/shared/racemap/FullCanvasOverlay.java | 4 +-- .../gwt/ui/simulator/PathCanvasOverlay.java | 4 +-- .../ui/simulator/RaceCourseCanvasOverlay.java | 8 +++--- .../ui/simulator/WindFieldCanvasOverlay.java | 27 ++++++++++++------- .../WindFieldGeneratorOscillationImpl.java | 16 +++++++---- 5 files changed, 38 insertions(+), 21 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/racemap/FullCanvasOverlay.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/racemap/FullCanvasOverlay.java index 194168c89df..736b3d05a05 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/racemap/FullCanvasOverlay.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/racemap/FullCanvasOverlay.java @@ -64,8 +64,8 @@ public abstract class FullCanvasOverlay extends CanvasOverlay { context2d.setStrokeStyle(pointColor); context2d.setLineWidth(3); context2d.beginPath(); - context2d.moveTo(x, y); - context2d.lineTo(x, y); + context2d.moveTo(x-1, y-1); + context2d.lineTo(x+1, y+1); context2d.closePath(); context2d.stroke(); 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 8026248c896..514b7fbb773 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 @@ -113,9 +113,9 @@ public class PathCanvasOverlay extends WindFieldCanvasOverlay { int x2 = canvasPositionInPx.getX() - this.getWidgetPosLeft(); int y2 = canvasPositionInPx.getY() - this.getWidgetPosTop(); - this.pointColor = pathColor; + this.pointColor = "Black"; drawPoint(x1, y1); - drawLine(x1, y1, x2, y2, 1/* weight */, pathColor); + drawLine(x1, y1, x2, y2, 3/* weight */, pathColor); drawPoint(x2, y2); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/simulator/RaceCourseCanvasOverlay.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/simulator/RaceCourseCanvasOverlay.java index 09a3edcf291..2ae9325858e 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/simulator/RaceCourseCanvasOverlay.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/simulator/RaceCourseCanvasOverlay.java @@ -105,7 +105,8 @@ public class RaceCourseCanvasOverlay extends FullCanvasOverlay { if (startMarker != null) { startMarker.setLatLng(startPoint); } else { - startMarker = new Marker(startPoint); +// default markers are too large cluttering race display +/* startMarker = new Marker(startPoint); map.addOverlay(startMarker); /* * startMarker.addMarkerMouseOverHandler(new MarkerMouseOverHandler () { @@ -137,7 +138,8 @@ public class RaceCourseCanvasOverlay extends FullCanvasOverlay { if (endMarker != null) { endMarker.setLatLng(endPoint); } else { - endMarker = new Marker(endPoint); +// default markers are too large cluttering race display +/* endMarker = new Marker(endPoint); map.addOverlay(endMarker); endMarker.addMarkerMouseOverHandler(new RaceCourseMarkerMouseOverHandler()); @@ -149,7 +151,7 @@ public class RaceCourseCanvasOverlay extends FullCanvasOverlay { map.getInfoWindow().close(); } - }); + });*/ } } 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 aa3523abbc3..e58c4cd1333 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 @@ -156,9 +156,12 @@ public class WindFieldCanvasOverlay extends FullCanvasOverlay implements TimeLis int index = 0; while (windDTOIter.hasNext()) { WindDTO windDTO = windDTOIter.next(); - int width = (int) Math.max(1, Math.min(2, Math.round(windDTO.trueWindSpeedInMetersPerSecond))); + //int aWidth = (int) Math.max(1, Math.min(2, Math.round(windDTO.trueWindSpeedInMetersPerSecond))); + double aWidth = Math.max(1., (windDTO.trueWindSpeedInMetersPerSecond/3.)); + double aLength = Math.max(10., (3.*windDTO.trueWindSpeedInMetersPerSecond)); + logger.info("windspeed: "+windDTO.trueWindSpeedInMetersPerSecond+", aWidth: "+aWidth+", aLength: "+aLength); DegreeBearingImpl dbi = new DegreeBearingImpl(windDTO.trueWindBearingDeg); - drawArrow(windDTO, dbi.getRadians(), arrowLength, width, ++index); + drawArrow(windDTO, dbi.getRadians(), aLength, aWidth, ++index); } String title = "Wind Field at " + windDTOList.size() + " points."; @@ -191,7 +194,9 @@ public class WindFieldCanvasOverlay extends FullCanvasOverlay implements TimeLis double theta = Math.atan2(-dy, dx); - drawHead(x1, y1, theta, length / 2, weight); + double hLength = Math.max(6.,6.+(10./(60.-10.))*Math.max(length-6.,0)); + logger.info("headlength: "+hLength+", arrowlength: "+length); + drawHead(x1, y1, theta, hLength, weight); //String text = "P" + index;// + NumberFormat.getFormat("0.00").format(windDTO.trueWindBearingDeg) + "°"; //drawPointWithText(x, y, text); drawPoint(x, y); @@ -206,12 +211,16 @@ public class WindFieldCanvasOverlay extends FullCanvasOverlay implements TimeLis if (t2 <= (-Math.PI)) t2 += 2 * Math.PI; - double x1 = Math.round(x - Math.cos(t) * headLength); - double y1 = Math.round(y + Math.sin(t) * headLength); - double x2 = Math.round(x - Math.cos(t2) * headLength); - double y2 = Math.round(y + Math.sin(t2) * headLength); - drawLine(x, y, x1, y1, weight, arrowHeadColor); - drawLine(x, y, x2, y2, weight, arrowHeadColor); + double x1 = (x - Math.cos(t) * headLength); + double y1 = (y + Math.sin(t) * headLength); + double x1o = (x + Math.cos(t) * weight/2); + double y1o = (y - Math.sin(t) * weight/2); + double x2 = (x - Math.cos(t2) * headLength); + double y2 = (y + Math.sin(t2) * headLength); + double x2o = (x + Math.cos(t2) * weight/2); + double y2o = (y - Math.sin(t2) * weight/2); + drawLine(x1o, y1o, x1, y1, weight, arrowHeadColor); + drawLine(x2o, y2o, x2, y2, weight, arrowHeadColor); } diff --git a/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/impl/WindFieldGeneratorOscillationImpl.java b/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/impl/WindFieldGeneratorOscillationImpl.java index 5d7d83601c1..24e435ffd6f 100644 --- a/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/impl/WindFieldGeneratorOscillationImpl.java +++ b/java/com.sap.sailing.simulator/src/com/sap/sailing/simulator/impl/WindFieldGeneratorOscillationImpl.java @@ -55,11 +55,13 @@ public class WindFieldGeneratorOscillationImpl extends WindFieldGeneratorImpl im double middleSpeed = windParameters.baseWindSpeed*windParameters.middleWindSpeed/100.0; double rightSpeed = windParameters.baseWindSpeed*windParameters.rightWindSpeed/100.0; int midPoint = ncol/2; - for (int i = 0; i < midPoint; ++i) { - speed[i] = new KnotSpeedImpl(leftSpeed + i*(middleSpeed-leftSpeed)/(midPoint-1)); + for (int i = 0; i <= midPoint; ++i) { + speed[i] = new KnotSpeedImpl(leftSpeed + i*(middleSpeed-leftSpeed)/(midPoint)); + logger.info("index: "+i+"speed: "+speed[i]); } - for (int i = 1; i <= ncol - midPoint; ++i) { - speed[midPoint -1 + i] = new KnotSpeedImpl(middleSpeed + i*(rightSpeed-middleSpeed)/(ncol - midPoint)); + for (int i = 1; i < ncol - midPoint; ++i) { + speed[midPoint + i] = new KnotSpeedImpl(middleSpeed + i*(rightSpeed-middleSpeed)/(ncol - midPoint -1)); + logger.info("index: "+(midPoint+i)+"speed: "+speed[midPoint-1+i]); } } @@ -89,7 +91,11 @@ public class WindFieldGeneratorOscillationImpl extends WindFieldGeneratorImpl im //double t = (timeIndex+(timeIndex+rowIndex)*vStep); double vStep = 1.0/(positions.length-1); double t = (timeIndex+rowIndex)*vStep*timeScale; - Bearing angle = new DegreeBearingImpl(Math.sin(2*Math.PI*t*windParameters.frequency)*windParameters.amplitude); + double oAngle = Math.sin(2*Math.PI*t*windParameters.frequency)*windParameters.amplitude; + Bearing angle = new DegreeBearingImpl(oAngle); + //logger.severe("timeIndex: "+timeIndex+" rowIndex: "+rowIndex+" timeScale: "+timeScale+" vStep: "+vStep+" t: "+t); + //System.out.print("timeIndex: "+timeIndex+" rowIndex: "+rowIndex+" timeScale: "+timeScale+" vStep: "+vStep+" t: "+t+"\n"); + //System.out.print("oAngle: "+oAngle+" angle: "+angle.getDegrees()+"\n"); angle = angle.add(phi0); return angle; } else {