micropeak_JAVA= \
MicroPeak.java \
MicroData.java \
+ MicroDataPoint.java \
MicroDownload.java \
MicroFrame.java \
MicroGraph.java \
import java.util.*;
import org.altusmetrum.AltosLib.*;
-abstract class MicroIterator implements Iterator<Double> {
+class MicroIterator implements Iterator<MicroDataPoint> {
int i;
MicroData data;
return i < data.pressures.length;
}
+ public MicroDataPoint next() {
+ return new MicroDataPoint(data, i++);
+ }
+
public MicroIterator (MicroData data) {
this.data = data;
i = 0;
}
}
-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;
- 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;
}
}
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) {
--- /dev/null
+/*
+ * 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
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));
}
}
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;
- for (double height : data.heights()) {
- if (height > landed_height + 10) {
+ for (MicroDataPoint point : data.points()) {
+ if (point.height > landed_height + 10) {
above = true;
} else {
- if (above && height < landed_height + 2) {
+ if (above && point.height < landed_height + 2) {
above = false;
- landed_time = data.time(t);
+ landed_time = point.time;
}
}
- t++;
}
}
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++;
}
}
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;
- 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;
- 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;
- if (speed > max_speed)
- max_speed = speed;
- t++;
+ if (point.speed > max_speed)
+ max_speed = point.speed;
}
}
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;
- if (accel > max_accel)
- max_accel = accel;
- t++;
+ if (point.accel > max_accel)
+ max_accel = point.accel;
}
}