From 7aaa880f40cac02136e848ca5985c983a3cff49e Mon Sep 17 00:00:00 2001 From: Fan-Wu Yang Date: Tue, 5 Sep 2017 13:05:37 +1200 Subject: [PATCH] VMG now works with some edge cases issues #story[1182] --- .../src/main/java/mock/model/NewPolars.java | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/racevisionGame/src/main/java/mock/model/NewPolars.java b/racevisionGame/src/main/java/mock/model/NewPolars.java index 1810ce52..3f070a3a 100644 --- a/racevisionGame/src/main/java/mock/model/NewPolars.java +++ b/racevisionGame/src/main/java/mock/model/NewPolars.java @@ -2,6 +2,7 @@ package mock.model; import shared.model.Bearing; +import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.TreeMap; @@ -28,7 +29,9 @@ public class NewPolars { if (!polars.containsKey(tws)){ polars.put(tws, new TreeMap<>()); } - polars.get(tws).put(twa, bs); + polars.get(tws).putIfAbsent(twa, bs); + polars.get(tws).putIfAbsent(360d - twa, bs); + System.out.println(String.format("tws %f, twa %f, bs %f", tws, twa, bs)); } public static void linearInterpolatePolars(){ @@ -38,8 +41,15 @@ public class NewPolars { // maxTWS = key; // } // } + /*for (double windSpeed: polars.keySet()){ + if (!polars.get(windSpeed).containsKey(180d)){ + polars.get(windSpeed).put(180d, windSpeed); + } + }*/ TreeMap prevTWS = null; - for (TreeMap tws: polars.values()){ + TreeMap> iterablePolars = new TreeMap<>(polars); + for (double windSpeed: iterablePolars.keySet()){ + TreeMap tws = iterablePolars.get(windSpeed); if (prevTWS == null){ prevTWS = tws; continue; @@ -58,9 +68,11 @@ public class NewPolars { for (double i = previousTWA; i < twa; i ++){ double mult = i - previousTWA; double newSpeed = diff * mult + prevSpeed; - System.out.println(newS); + //System.out.println(newSpeed); + System.out.println(String.format("tws %f, twa %f, bs %f", windSpeed, i, newSpeed)); tws.put(i, newSpeed); } + previousTWA = twa; } } } @@ -88,13 +100,12 @@ public class NewPolars { * @return */ private static int getQuadrant(double degrees){ - return ((int) degrees % 360) / 90 + 1; + return ((((int) degrees % 360) + 360) % 360) / 90 + 1; } private static double getBestSpeedInQuadrant(int quad, Map set){ - double quadVal = (double)((quad - 1) % 2);// this is as the hash map only has values 0 - 180 - double min = quadVal* 90; - double max = (quadVal + 1) * 90; + double min = quad* 90; + double max = (quad + 1) * 90; double maxAngle = 0; double maxSpeed = 0; for (Double s: set.keySet()){