X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altosui%2FAltosFlightStats.java;h=967f094f3516322f3660416d0d09b9f636324ca5;hp=dce5cb3ecd8380a30a6c2b34ed714ae16150388c;hb=5a3c5de6657d1c26e52015a8acec0cd05e294cef;hpb=170510bb183715e9ba580b180f20657d6602644e diff --git a/altosui/AltosFlightStats.java b/altosui/AltosFlightStats.java index dce5cb3e..967f094f 100644 --- a/altosui/AltosFlightStats.java +++ b/altosui/AltosFlightStats.java @@ -17,22 +17,14 @@ package altosui; -import java.awt.*; -import java.awt.event.*; -import javax.swing.*; -import javax.swing.filechooser.FileNameExtensionFilter; -import javax.swing.table.*; import java.io.*; -import java.util.*; -import java.text.*; -import java.util.prefs.*; -import java.util.concurrent.*; +import org.altusmetrum.altoslib.*; public class AltosFlightStats { double max_height; double max_speed; double max_acceleration; - double[] state_speed = new double[Altos.ao_flight_invalid + 1]; + double[] state_accel_speed = new double[Altos.ao_flight_invalid + 1]; double[] state_baro_speed = new double[Altos.ao_flight_invalid + 1]; double[] state_accel = new double[Altos.ao_flight_invalid + 1]; int[] state_count = new int[Altos.ao_flight_invalid + 1]; @@ -77,10 +69,29 @@ public class AltosFlightStats { return landed_time; } + double boost_time(AltosRecordIterable iterable) { + double boost_time = -1000; + + AltosState state = null; + + for (AltosRecord record : iterable) { + state = new AltosState(record, state); + + if (state.acceleration < 1) + boost_time = state.time; + if (state.state >= Altos.ao_flight_boost) + break; + } + if (boost_time == -1000) + boost_time = state.time; + return boost_time; + } + + public AltosFlightStats(AltosRecordIterable iterable) throws InterruptedException, IOException { AltosState state = null; AltosState new_state = null; - double boost_time = -1; + double boost_time = boost_time(iterable); double end_time = 0; double landed_time = landed_time(iterable); @@ -95,10 +106,12 @@ public class AltosFlightStats { new_state = new AltosState(record, state); end_time = new_state.time; state = new_state; + if (state.time >= boost_time && state.state < Altos.ao_flight_boost) + state.state = Altos.ao_flight_boost; + if (state.time >= landed_time && state.state < Altos.ao_flight_landed) + state.state = Altos.ao_flight_landed; if (0 <= state.state && state.state < Altos.ao_flight_invalid) { if (state.state >= Altos.ao_flight_boost) { - if (boost_time == -1) - boost_time = state.time; if (state.gps != null && state.gps.locked && year < 0) { year = state.gps.year; @@ -109,10 +122,8 @@ public class AltosFlightStats { second = state.gps.second; } } - if (state.time >= landed_time) - state.state = Altos.ao_flight_landed; state_accel[state.state] += state.acceleration; - state_speed[state.state] += state.speed; + state_accel_speed[state.state] += state.accel_speed; state_baro_speed[state.state] += state.baro_speed; state_count[state.state]++; if (state_start[state.state] == 0.0) @@ -120,8 +131,8 @@ public class AltosFlightStats { if (state_end[state.state] < state.time) state_end[state.state] = state.time; max_height = state.max_height; - if (state.max_speed != 0) - max_speed = state.max_speed; + if (state.max_accel_speed != 0) + max_speed = state.max_accel_speed; else max_speed = state.max_baro_speed; max_acceleration = state.max_acceleration; @@ -129,7 +140,7 @@ public class AltosFlightStats { } for (int s = Altos.ao_flight_startup; s <= Altos.ao_flight_landed; s++) { if (state_count[s] > 0) { - state_speed[s] /= state_count[s]; + state_accel_speed[s] /= state_count[s]; state_baro_speed[s] /= state_count[s]; state_accel[s] /= state_count[s]; }