Speed: use Distance for conversions.

This commit is contained in:
Dennis Guse
2022-07-01 16:57:06 +02:00
parent 807ac3fc9f
commit 11d912d14d
2 changed files with 11 additions and 21 deletions
@@ -85,16 +85,23 @@ public class Speed {
return speed_mps;
}
/**
* We interpret {@link Speed} here as a {@link Distance} over 1h.
*/
private Distance toH() {
return Distance.of(speed_mps * Duration.ofHours(1).toSeconds());
}
public double toKMH() {
return speed_mps * UnitConversions.MPS_TO_KMH;
return toH().toKM();
}
public double toMPH() {
return toKMH() * UnitConversions.KM_TO_MI;
return toH().toMI();
}
public double toKnots() {
return toKMH() * UnitConversions.KM_TO_NAUTICAL_MILE;
return toH().toNauticalMiles();
}
public Duration toPace(UnitSystem unitSystem) {
@@ -102,20 +109,7 @@ public class Speed {
return Duration.ofSeconds(0);
}
double distance = speed_mps;
switch (unitSystem) { //TODO Can we use to(UnitSystem)?
case METRIC:
distance *= UnitConversions.M_TO_KM;
break;
case IMPERIAL:
distance *= UnitConversions.M_TO_MI;
break;
case NAUTICAL_IMPERIAL:
distance *= UnitConversions.M_TO_NAUTICAL_MILE;
break;
default:
throw new RuntimeException("Not implemented");
}
double distance = Distance.of(speed_mps).toKM_Miles(unitSystem);
return Duration.ofSeconds(Math.round(1 / distance));
}
@@ -15,8 +15,6 @@
*/
package de.dennisguse.opentracks.data.models;
import java.time.Duration;
/**
* Unit conversion constants.
*
@@ -41,8 +39,6 @@ public class UnitConversions {
public static final double NAUTICAL_MILE_TO_M = 1852.0;
public static final double M_TO_NAUTICAL_MILE = 1 / NAUTICAL_MILE_TO_M;
public static final double KM_TO_NAUTICAL_MILE = 1000 * M_TO_NAUTICAL_MILE;
// multiplication factor to convert meters per second to kilometers per hour
public static final double MPS_TO_KMH = M_TO_KM / (1d / Duration.ofHours(1).toSeconds());
// multiplication factor to convert miles to km
public static final double MI_TO_KM = 1 / KM_TO_MI;
// multiplication factor to convert miles to m