micropoint: Add MicroDataPoint
authorKeith Packard <keithp@keithp.com>
Wed, 2 Jan 2013 19:22:11 +0000 (11:22 -0800)
committerKeith Packard <keithp@keithp.com>
Wed, 2 Jan 2013 19:22:11 +0000 (11:22 -0800)
This holds height/speed/accel data all in one place

Signed-off-by: Keith Packard <keithp@keithp.com>
micropeak/Makefile.am
micropeak/MicroData.java
micropeak/MicroDataPoint.java [new file with mode: 0644]
micropeak/MicroGraph.java
micropeak/MicroStats.java

index 2dd9c69c58333bef8394c771de24d8cf6502a164..26431bd55db49bcf93738c9b5f644576df1b130a 100644 (file)
@@ -10,6 +10,7 @@ micropeakdir=$(datadir)/java
 micropeak_JAVA= \
        MicroPeak.java \
        MicroData.java \
 micropeak_JAVA= \
        MicroPeak.java \
        MicroData.java \
+       MicroDataPoint.java \
        MicroDownload.java \
        MicroFrame.java \
        MicroGraph.java \
        MicroDownload.java \
        MicroFrame.java \
        MicroGraph.java \
index 8ccd5fd8a88e21ec9ef592777d4c8e03e210e1dd..2afd3cd7b3c9240f5a1baf6134526aeeb1d13b4e 100644 (file)
@@ -22,7 +22,7 @@ import java.io.*;
 import java.util.*;
 import org.altusmetrum.AltosLib.*;
 
 import java.util.*;
 import org.altusmetrum.AltosLib.*;
 
-abstract class MicroIterator implements Iterator<Double> {
+class MicroIterator implements Iterator<MicroDataPoint> {
        int             i;
        MicroData       data;
 
        int             i;
        MicroData       data;
 
@@ -30,6 +30,10 @@ abstract class MicroIterator implements Iterator<Double> {
                return i < data.pressures.length;
        }
 
                return i < data.pressures.length;
        }
 
+       public MicroDataPoint next() {
+               return new MicroDataPoint(data, i++);
+       }
+
        public MicroIterator (MicroData data) {
                this.data = data;
                i = 0;
        public MicroIterator (MicroData data) {
                this.data = data;
                i = 0;
@@ -39,66 +43,15 @@ abstract class MicroIterator implements Iterator<Double> {
        }
 }
 
        }
 }
 
-class MicroHeightIterator extends MicroIterator {
-       public Double next() {
-               return data.height(i++);
-       }
-
-       public MicroHeightIterator(MicroData data) {
-               super(data);
-       }
-}
-
-class MicroHeightIterable implements Iterable<Double> {
-       MicroData       data;
-
-       public Iterator<Double> iterator() {
-               return new MicroHeightIterator(data);
-       }
-
-       public MicroHeightIterable(MicroData data) {
-               this.data = data;
-       }
-}
-
-class MicroSpeedIterator extends MicroIterator {
-       public Double next() {
-               return data.speed(i++);
-       }
-       public MicroSpeedIterator(MicroData data) {
-               super(data);
-       }
-}
-
-class MicroSpeedIterable implements Iterable<Double> {
-       MicroData       data;
-
-       public Iterator<Double> iterator() {
-               return new MicroSpeedIterator(data);
-       }
-
-       public MicroSpeedIterable(MicroData data) {
-               this.data = data;
-       }
-}
+class MicroIterable implements Iterable<MicroDataPoint> {
 
 
-class MicroAccelIterator extends MicroIterator {
-       public Double next() {
-               return data.acceleration(i++);
-       }
-       public MicroAccelIterator(MicroData data) {
-               super(data);
-       }
-}
-
-class MicroAccelIterable implements Iterable<Double> {
        MicroData       data;
 
        MicroData       data;
 
-       public Iterator<Double> iterator() {
-               return new MicroAccelIterator(data);
+       public Iterator<MicroDataPoint> iterator() {
+               return new MicroIterator(data);
        }
 
        }
 
-       public MicroAccelIterable(MicroData data) {
+       public MicroIterable(MicroData data) {
                this.data = data;
        }
 }
                this.data = data;
        }
 }
@@ -225,16 +178,8 @@ public class MicroData {
                return AltosConvert.pressure_to_altitude(pressures[i]);
        }
 
                return AltosConvert.pressure_to_altitude(pressures[i]);
        }
 
-       public Iterable<Double> heights() {
-               return new MicroHeightIterable(this);
-       }
-
-       public Iterable<Double> speeds() {
-               return new MicroSpeedIterable(this);
-       }
-
-       public Iterable<Double> accels() {
-               return new MicroAccelIterable(this);
+       public Iterable<MicroDataPoint> points() {
+               return new MicroIterable(this);
        }
 
        int fact(int n) {
        }
 
        int fact(int n) {
diff --git a/micropeak/MicroDataPoint.java b/micropeak/MicroDataPoint.java
new file mode 100644 (file)
index 0000000..3fd1e64
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright © 2012 Keith Packard <keithp@keithp.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+
+package org.altusmetrum.micropeak;
+
+public class MicroDataPoint {
+       public double   time;
+       public double   height;
+       public double   speed;
+       public double   accel;
+
+       public MicroDataPoint (double height, double speed, double accel, double time) {
+               this.height = height;
+               this.speed = speed;
+               this.accel = accel;
+               this.time = time;
+       }
+
+       public MicroDataPoint(MicroData data, int i) {
+               this(data.height(i),
+                    data.speed(i),
+                    data.acceleration(i),
+                    data.time(i));
+       }
+}
\ No newline at end of file
index c55806348463f8a72b7c52b35abab9307911f6e4..8330a67bde7b8a120cfc565496f09a2aa2078315 100644 (file)
@@ -106,11 +106,10 @@ public class MicroGraph implements AltosUnitsListener {
                heightSeries.clear();
                speedSeries.clear();
                accelSeries.clear();
                heightSeries.clear();
                speedSeries.clear();
                accelSeries.clear();
-               for (int i = 0; i < data.pressures.length; i++) {
-                       double x = data.time(i);
-                       heightSeries.add(x, AltosConvert.height.value(data.height(i)));
-                       speedSeries.add(x, AltosConvert.speed.value(data.speed(i)));
-                       accelSeries.add(x, AltosConvert.accel.value(data.acceleration(i)));
+               for (MicroDataPoint point : data.points()) {
+                       heightSeries.add(point.time, AltosConvert.height.value(point.height));
+                       speedSeries.add(point.time, AltosConvert.speed.value(point.speed));
+                       accelSeries.add(point.time, AltosConvert.accel.value(point.accel));
                }
        }
 
                }
        }
 
index 6ae8a2b28a11101e78f6b076cb2d7808558a0345..056fac7d1d77d3538663cf79622819f7fafc9de9 100644 (file)
@@ -39,25 +39,21 @@ public class MicroStats {
        void find_landing() {
                landed_height = 0;
 
        void find_landing() {
                landed_height = 0;
 
-               int t = 0;
-               for (double height : data.heights()) {
-                       landed_height = height;
-                       t++;
+               for (MicroDataPoint point : data.points()) {
+                       landed_height = point.height;
+                       landed_time = point.time;
                }
                }
-               landed_time = data.time(t);
 
 
-               t = 0;
                boolean above = false;
                boolean above = false;
-               for (double height : data.heights()) {
-                       if (height > landed_height + 10) {
+               for (MicroDataPoint point : data.points()) {
+                       if (point.height > landed_height + 10) {
                                above = true;
                        } else {
                                above = true;
                        } else {
-                               if (above && height < landed_height + 2) {
+                               if (above && point.height < landed_height + 2) {
                                        above = false;
                                        above = false;
-                                       landed_time = data.time(t);
+                                       landed_time = point.time;
                                }
                        }
                                }
                        }
-                       t++;
                }
        }
 
                }
        }
 
@@ -65,13 +61,11 @@ public class MicroStats {
                apogee_height = 0;
                apogee_time = 0;
                
                apogee_height = 0;
                apogee_time = 0;
                
-               int t = 0;
-               for (double height : data.heights()) {
-                       if (height > apogee_height) {
-                               apogee_height = height;
-                               apogee_time = data.time(t);
+               for (MicroDataPoint point : data.points()) {
+                       if (point.height > apogee_height) {
+                               apogee_height = point.height;
+                               apogee_time = point.time;
                        }
                        }
-                       t++;
                }
        }
 
                }
        }
 
@@ -79,47 +73,31 @@ public class MicroStats {
                coast_height = 0;
                coast_time = 0;
 
                coast_height = 0;
                coast_time = 0;
 
-               int t = 0;
-               for (double accel : data.accels()) {
-                       if (accel < -9.8)
+               for (MicroDataPoint point : data.points()) {
+                       if (point.accel < -9.8)
                                break;
                                break;
-                       t++;
-               }
-               coast_time = data.time(t);
-
-               int coast_t = t;
-               t = 0;
-               for (double height : data.heights()) {
-                       if (t >= coast_t) {
-                               coast_height = height;
-                               break;
-                       }
-                       t++;
+                       coast_time = point.time;
+                       coast_height = point.height;
                }
        }
 
        void find_max_speed() {
                max_speed = 0;
                }
        }
 
        void find_max_speed() {
                max_speed = 0;
-               int     t = 0;
-               for (double speed : data.speeds()) {
-                       if (data.time(t) > apogee_time)
+               for (MicroDataPoint point : data.points()) {
+                       if (point.time > apogee_time)
                                break;
                                break;
-                       if (speed > max_speed)
-                               max_speed = speed;
-                       t++;
+                       if (point.speed > max_speed)
+                               max_speed = point.speed;
                }
        }
 
        void find_max_accel() {
                max_accel = 0;
                }
        }
 
        void find_max_accel() {
                max_accel = 0;
-
-               int t = 0;
-               for (double accel : data.accels()) {
-                       if (data.time(t) > apogee_time)
+               for (MicroDataPoint point : data.points()) {
+                       if (point.time > apogee_time)
                                break;
                                break;
-                       if (accel > max_accel)
-                               max_accel = accel;
-                       t++;
+                       if (point.accel > max_accel)
+                               max_accel = point.accel;
                }
        }
 
                }
        }