diff --git a/src/com/wattzap/Main.java b/src/com/wattzap/Main.java index 4a9c6bf..2d97239 100644 --- a/src/com/wattzap/Main.java +++ b/src/com/wattzap/Main.java @@ -183,7 +183,7 @@ public void run() { logger.error("ANT+ " + e.getMessage()); new DummySpeedCadenceListener(); userPrefs.setAntEnabled(false); - odo = new Odometer(); + odo = new AntOdometer(); } // Performs an isregister check, be careful if we move below AboutPanel diff --git a/src/com/wattzap/model/GPXReader.java b/src/com/wattzap/model/GPXReader.java index 62b750f..08aad53 100644 --- a/src/com/wattzap/model/GPXReader.java +++ b/src/com/wattzap/model/GPXReader.java @@ -187,6 +187,10 @@ public void load(String filename) { last = wp; }// for + double avgDistByPoint = distance/index; + int nbRollingPoint = (int)(100/avgDistByPoint); + if(nbRollingPoint<1) nbRollingPoint=1; + if (currentTime > 0) { lastSegTime = last.getTime().getTime(); } @@ -198,37 +202,39 @@ public void load(String filename) { * using a moving average of 10 values. */ int i = 0; - int j = 0; - Rolling gradient = new Rolling(10); - for (Point p : segment) { - if (p.getDistanceFromStart() > segment[i] - .getDistanceFromStart() + gradientDistance) { - double slope = 100 - * (p.getElevation() - segment[i].getElevation()) - / (p.getDistanceFromStart() - segment[i] - .getDistanceFromStart()); - gradient.add(slope); - if (slope > maxSlope) { - maxSlope = slope; - } - if (slope < minSlope) { - minSlope = slope; + Rolling gradient = new Rolling(nbRollingPoint); + //for (Point p : segment) { + int b = 0; + int a = 0; + while(i < segment.length){ + b = i-1; + if(b<0) b=0; + a = i+1; + if(a>segment.length-1) a = segment.length-1; + while(segment[a].getDistanceFromStart() - segment[b].getDistanceFromStart() < gradientDistance){ //distance < 100m + if(segment[a].getDistanceFromStart() - segment[i].getDistanceFromStart() > segment[i].getDistanceFromStart() - segment[b].getDistanceFromStart() && b > 0){ //after is bigger + b--; + } else { //before is bigger + if(a < segment.length-1){ + a++; + } else { + b--; + } } - segment[i++].setGradient(gradient.getAverage()); } - j++; - } - - while (i < j - 1) { double slope = 100 - * (segment[j - 1].getElevation() - segment[i] - .getElevation()) - / (segment[j - 1].getDistanceFromStart() - segment[i] + * (segment[a].getElevation() - segment[b].getElevation()) + / (segment[a].getDistanceFromStart() - segment[b] .getDistanceFromStart()); gradient.add(slope); + if (slope > maxSlope) { + maxSlope = slope; + } + if (slope < minSlope) { + minSlope = slope; + } segment[i++].setGradient(gradient.getAverage()); } - segment[i++].setGradient(gradient.getAverage()); // gradient done // resistance levels - use blocks of 500 meters diff --git a/src/com/wattzap/view/training/TrainingDisplay.java b/src/com/wattzap/view/training/TrainingDisplay.java index e55f075..30d72b2 100644 --- a/src/com/wattzap/view/training/TrainingDisplay.java +++ b/src/com/wattzap/view/training/TrainingDisplay.java @@ -383,7 +383,7 @@ public void callback(Messages message, Object o) { } startTime = 0; - MessageBus.INSTANCE.send(Messages.TRAININGITEM, current); + if(current != null) MessageBus.INSTANCE.send(Messages.TRAININGITEM, current); break; case STARTPOS: @@ -431,4 +431,4 @@ public void callback(Messages message, Object o) { break; } } -} \ No newline at end of file +}