X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altoslib%2FAltosFlightStats.java;h=7c8ed85e589d7f89623c116b7f32d2830d0d070e;hp=6f8732cf5c25af479793e670fb256b6dc3312cfe;hb=378ebab2e70917b4182cbd840a3fa66e4e42fd92;hpb=c8dbcaf69cd538a31ab6e2b568237ae7c8656a9a diff --git a/altoslib/AltosFlightStats.java b/altoslib/AltosFlightStats.java index 6f8732cf..7c8ed85e 100644 --- a/altoslib/AltosFlightStats.java +++ b/altoslib/AltosFlightStats.java @@ -16,7 +16,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_12; +package org.altusmetrum.altoslib_13; import java.io.*; @@ -26,6 +26,9 @@ public class AltosFlightStats { public double max_speed; public double max_acceleration; public double[] state_speed = new double[AltosLib.ao_flight_invalid + 1]; + public double[] state_enter_speed = new double[AltosLib.ao_flight_invalid + 1]; + public double[] state_enter_height = new double[AltosLib.ao_flight_invalid + 1]; + public double[] state_enter_gps_height = new double[AltosLib.ao_flight_invalid + 1]; public double[] state_accel = new double[AltosLib.ao_flight_invalid + 1]; public double[] state_time = new double[AltosLib.ao_flight_invalid + 1]; public String product; @@ -131,6 +134,13 @@ public class AltosFlightStats { private void add_times(AltosFlightSeries series, int state, double start_time, double end_time) { double delta_time = end_time - start_time; if (0 <= state && state <= AltosLib.ao_flight_invalid && delta_time > 0) { + if (state_enter_speed[state] == AltosLib.MISSING) + state_enter_speed[state] = series.speed_series.value(start_time); + if (state_enter_height[state] == AltosLib.MISSING) + state_enter_height[state] = series.height_series.value(start_time); + if (state_enter_gps_height[state] == AltosLib.MISSING) + if (series.gps_height != null) + state_enter_gps_height[state] = series.gps_height.value(start_time); speeds[state].value += series.speed_series.average(start_time, end_time) * delta_time; speeds[state].time += delta_time; accels[state].value += series.accel_series.average(start_time, end_time) * delta_time; @@ -192,6 +202,7 @@ public class AltosFlightStats { for (int s = 0; s < AltosLib.ao_flight_invalid + 1; s++) { state_speed[s] = AltosLib.MISSING; + state_enter_speed[s] = AltosLib.MISSING; state_accel[s] = AltosLib.MISSING; state_time[s] = 0; speeds[s] = new AltosTimeValue(0, 0); @@ -208,8 +219,11 @@ public class AltosFlightStats { add_times(series, (int) prev.value, prev.time, state.time); prev = state; } - if (prev != null) - add_times(series, (int) prev.value, prev.time, series.accel_series.last().time); + if (prev != null) { + AltosTimeValue last_accel = series.accel_series.last(); + if (last_accel != null) + add_times(series, (int) prev.value, prev.time, last_accel.time); + } } for (int s = 0; s <= AltosLib.ao_flight_invalid; s++) { @@ -241,18 +255,19 @@ public class AltosFlightStats { has_gps = true; lat = pad_lat = gps.lat; lon = pad_lon = gps.lon; - for (AltosGPSTimeValue gtv : series.gps_series) { - gps = gtv.gps; - if (gps.locked && gps.nsat >= 4) { - lat = gps.lat; - lon = gps.lon; + if (series.gps_series != null) { + for (AltosGPSTimeValue gtv : series.gps_series) { + gps = gtv.gps; + if (gps.locked && gps.nsat >= 4) { + lat = gps.lat; + lon = gps.lon; + } } } - } - max_height = AltosLib.MISSING; - if (series.height_series != null) + max_height = series.max_height; + if (max_height == AltosLib.MISSING && series.height_series != null) max_height = series.height_series.max().value; max_gps_height = AltosLib.MISSING; if (series.gps_height != null) {