Merge branch 'unstable' into feature/fix-macos-after-java11-upgrade
This commit is contained in:
commit
b78b07e76e
20
.idea/artifacts/openrocket_jar.xml
generated
20
.idea/artifacts/openrocket_jar.xml
generated
@ -10,29 +10,16 @@
|
|||||||
<element id="extracted-dir" path="$PROJECT_DIR$/swing/lib/jcommon-1.0.18.jar" path-in-jar="/" />
|
<element id="extracted-dir" path="$PROJECT_DIR$/swing/lib/jcommon-1.0.18.jar" path-in-jar="/" />
|
||||||
<element id="extracted-dir" path="$PROJECT_DIR$/swing/lib/jogl/gluegen-rt.jar" path-in-jar="/" />
|
<element id="extracted-dir" path="$PROJECT_DIR$/swing/lib/jogl/gluegen-rt.jar" path-in-jar="/" />
|
||||||
<element id="extracted-dir" path="$PROJECT_DIR$/lib-test/test-plugin.jar" path-in-jar="/" />
|
<element id="extracted-dir" path="$PROJECT_DIR$/lib-test/test-plugin.jar" path-in-jar="/" />
|
||||||
<element id="extracted-dir" path="$PROJECT_DIR$/core/lib/guice-3.0.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$PROJECT_DIR$/lib-test/jmock-junit4-2.6.0-RC2.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$PROJECT_DIR$/core/lib/annotation-detector-3.0.2.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$PROJECT_DIR$/swing/lib/miglayout-4.0-swing.jar" path-in-jar="/" />
|
<element id="extracted-dir" path="$PROJECT_DIR$/swing/lib/miglayout-4.0-swing.jar" path-in-jar="/" />
|
||||||
<element id="extracted-dir" path="$PROJECT_DIR$/lib-test/hamcrest-core-1.3.0RC1.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$PROJECT_DIR$/swing/lib/jogl/jogl-all.jar" path-in-jar="/" />
|
<element id="extracted-dir" path="$PROJECT_DIR$/swing/lib/jogl/jogl-all.jar" path-in-jar="/" />
|
||||||
<element id="extracted-dir" path="$PROJECT_DIR$/swing/lib/iText-5.0.2.jar" path-in-jar="/" />
|
<element id="extracted-dir" path="$PROJECT_DIR$/swing/lib/iText-5.0.2.jar" path-in-jar="/" />
|
||||||
<element id="extracted-dir" path="$PROJECT_DIR$/swing/lib/rsyntaxtextarea-2.5.6.jar" path-in-jar="/" />
|
<element id="extracted-dir" path="$PROJECT_DIR$/swing/lib/rsyntaxtextarea-2.5.6.jar" path-in-jar="/" />
|
||||||
<element id="extracted-dir" path="$PROJECT_DIR$/lib-test/hamcrest-library-1.3.0RC1.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$PROJECT_DIR$/lib-test/uispec4j-2.3-jdk16.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$PROJECT_DIR$/core/lib/javax.inject.jar" path-in-jar="/" />
|
<element id="extracted-dir" path="$PROJECT_DIR$/core/lib/javax.inject.jar" path-in-jar="/" />
|
||||||
<element id="extracted-dir" path="$PROJECT_DIR$/core/lib/slf4j-api-1.7.5.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$PROJECT_DIR$/swing/lib/logback-core-1.0.12.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$PROJECT_DIR$/swing/lib/logback-classic-1.0.12.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$PROJECT_DIR$/lib-test/junit-dep-4.8.2.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$PROJECT_DIR$/lib-test/jmock-2.6.0-RC2.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$PROJECT_DIR$/core/lib/opencsv-2.3.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$PROJECT_DIR$/swing/lib/jfreechart-1.0.15.jar" path-in-jar="/" />
|
<element id="extracted-dir" path="$PROJECT_DIR$/swing/lib/jfreechart-1.0.15.jar" path-in-jar="/" />
|
||||||
<element id="extracted-dir" path="$PROJECT_DIR$/core/lib/aopalliance.jar" path-in-jar="/" />
|
<element id="extracted-dir" path="$PROJECT_DIR$/core/lib/aopalliance.jar" path-in-jar="/" />
|
||||||
<element id="library" level="module" name="resources" module-name="OpenRocket Core" />
|
<element id="library" level="module" name="resources" module-name="OpenRocket Core" />
|
||||||
<element id="library" level="module" name="resources" module-name="OpenRocket Swing" />
|
<element id="library" level="module" name="resources" module-name="OpenRocket Swing" />
|
||||||
<element id="extracted-dir" path="$PROJECT_DIR$/core/lib-extra/RXTXcomm.jar" path-in-jar="/" />
|
<element id="extracted-dir" path="$PROJECT_DIR$/core/lib-extra/RXTXcomm.jar" path-in-jar="/" />
|
||||||
<element id="extracted-dir" path="$PROJECT_DIR$/core/lib/guice-multibindings-3.0.jar" path-in-jar="/" />
|
|
||||||
<element id="extracted-dir" path="$PROJECT_DIR$/swing/lib/OrangeExtensions-1.2.jar" path-in-jar="/" />
|
<element id="extracted-dir" path="$PROJECT_DIR$/swing/lib/OrangeExtensions-1.2.jar" path-in-jar="/" />
|
||||||
<element id="extracted-dir" path="$PROJECT_DIR$/swing/lib/jogl/gluegen-rt-natives-linux-amd64.jar" path-in-jar="/" />
|
<element id="extracted-dir" path="$PROJECT_DIR$/swing/lib/jogl/gluegen-rt-natives-linux-amd64.jar" path-in-jar="/" />
|
||||||
<element id="extracted-dir" path="$PROJECT_DIR$/swing/lib/jogl/gluegen-rt-natives-linux-i586.jar" path-in-jar="/" />
|
<element id="extracted-dir" path="$PROJECT_DIR$/swing/lib/jogl/gluegen-rt-natives-linux-i586.jar" path-in-jar="/" />
|
||||||
@ -45,6 +32,13 @@
|
|||||||
<element id="extracted-dir" path="$PROJECT_DIR$/swing/lib/jogl/jogl-all-natives-macosx-universal.jar" path-in-jar="/" />
|
<element id="extracted-dir" path="$PROJECT_DIR$/swing/lib/jogl/jogl-all-natives-macosx-universal.jar" path-in-jar="/" />
|
||||||
<element id="extracted-dir" path="$PROJECT_DIR$/swing/lib/jogl/jogl-all-natives-windows-amd64.jar" path-in-jar="/" />
|
<element id="extracted-dir" path="$PROJECT_DIR$/swing/lib/jogl/jogl-all-natives-windows-amd64.jar" path-in-jar="/" />
|
||||||
<element id="extracted-dir" path="$PROJECT_DIR$/swing/lib/jogl/jogl-all-natives-windows-i586.jar" path-in-jar="/" />
|
<element id="extracted-dir" path="$PROJECT_DIR$/swing/lib/jogl/jogl-all-natives-windows-i586.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$PROJECT_DIR$/core/lib/annotation-detector-3.0.5.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$PROJECT_DIR$/core/lib/guice-4.2.1.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$PROJECT_DIR$/core/lib/guava-26.0-jre.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$PROJECT_DIR$/core/lib/opencsv-4.3.2.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$PROJECT_DIR$/core/lib/slf4j-api-1.7.30.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$PROJECT_DIR$/core/lib/logback-classic-1.2.3.jar" path-in-jar="/" />
|
||||||
|
<element id="extracted-dir" path="$PROJECT_DIR$/core/lib/logback-core-1.2.3.jar" path-in-jar="/" />
|
||||||
</root>
|
</root>
|
||||||
</artifact>
|
</artifact>
|
||||||
</component>
|
</component>
|
@ -16,7 +16,7 @@
|
|||||||
<classpathentry kind="lib" path="resources"/>
|
<classpathentry kind="lib" path="resources"/>
|
||||||
<classpathentry kind="lib" path="lib/javax.inject.jar"/>
|
<classpathentry kind="lib" path="lib/javax.inject.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/aopalliance.jar"/>
|
<classpathentry kind="lib" path="lib/aopalliance.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/slf4j-api-1.7.5.jar"/>
|
<classpathentry kind="lib" path="lib/slf4j-api-1.7.30.jar"/>
|
||||||
<classpathentry kind="lib" path="/OpenRocket Test Libraries/test-plugin.jar"/>
|
<classpathentry kind="lib" path="/OpenRocket Test Libraries/test-plugin.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/annotation-detector-3.0.5.jar"/>
|
<classpathentry kind="lib" path="lib/annotation-detector-3.0.5.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/guice-4.2.1.jar"/>
|
<classpathentry kind="lib" path="lib/guice-4.2.1.jar"/>
|
||||||
|
@ -80,15 +80,6 @@
|
|||||||
<SOURCES />
|
<SOURCES />
|
||||||
</library>
|
</library>
|
||||||
</orderEntry>
|
</orderEntry>
|
||||||
<orderEntry type="module-library">
|
|
||||||
<library name="slf4j-api-1.7.5.jar">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MODULE_DIR$/lib/slf4j-api-1.7.5.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC />
|
|
||||||
<SOURCES />
|
|
||||||
</library>
|
|
||||||
</orderEntry>
|
|
||||||
<orderEntry type="library" name="lib-test" level="project" />
|
<orderEntry type="library" name="lib-test" level="project" />
|
||||||
<orderEntry type="library" name="javax" level="project" />
|
<orderEntry type="library" name="javax" level="project" />
|
||||||
<orderEntry type="module-library">
|
<orderEntry type="module-library">
|
||||||
@ -127,5 +118,14 @@
|
|||||||
<SOURCES />
|
<SOURCES />
|
||||||
</library>
|
</library>
|
||||||
</orderEntry>
|
</orderEntry>
|
||||||
|
<orderEntry type="module-library">
|
||||||
|
<library>
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$MODULE_DIR$/lib/slf4j-api-1.7.30.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</orderEntry>
|
||||||
</component>
|
</component>
|
||||||
</module>
|
</module>
|
BIN
core/lib/slf4j-api-1.7.30.jar
Normal file
BIN
core/lib/slf4j-api-1.7.30.jar
Normal file
Binary file not shown.
Binary file not shown.
@ -101,7 +101,7 @@ public class FlightData {
|
|||||||
for (FlightDataBranch b : branches)
|
for (FlightDataBranch b : branches)
|
||||||
this.addBranch(b);
|
this.addBranch(b);
|
||||||
|
|
||||||
calculateIntrestingValues();
|
calculateInterestingValues();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -126,7 +126,7 @@ public class FlightData {
|
|||||||
branches.add(branch);
|
branches.add(branch);
|
||||||
|
|
||||||
if (branches.size() == 1) {
|
if (branches.size() == 1) {
|
||||||
calculateIntrestingValues();
|
calculateInterestingValues();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -185,7 +185,7 @@ public class FlightData {
|
|||||||
* Calculate the max. altitude/velocity/acceleration, time to apogee, flight time
|
* Calculate the max. altitude/velocity/acceleration, time to apogee, flight time
|
||||||
* and ground hit velocity.
|
* and ground hit velocity.
|
||||||
*/
|
*/
|
||||||
private void calculateIntrestingValues() {
|
private void calculateInterestingValues() {
|
||||||
if (branches.isEmpty())
|
if (branches.isEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -195,12 +195,6 @@ public class FlightData {
|
|||||||
maxMachNumber = branch.getMaximum(FlightDataType.TYPE_MACH_NUMBER);
|
maxMachNumber = branch.getMaximum(FlightDataType.TYPE_MACH_NUMBER);
|
||||||
|
|
||||||
flightTime = branch.getLast(FlightDataType.TYPE_TIME);
|
flightTime = branch.getLast(FlightDataType.TYPE_TIME);
|
||||||
if (branch.getLast(FlightDataType.TYPE_ALTITUDE) < 10) {
|
|
||||||
groundHitVelocity = branch.getLast(FlightDataType.TYPE_VELOCITY_TOTAL);
|
|
||||||
} else {
|
|
||||||
groundHitVelocity = Double.NaN;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Time to apogee
|
// Time to apogee
|
||||||
List<Double> time = branch.get(FlightDataType.TYPE_TIME);
|
List<Double> time = branch.get(FlightDataType.TYPE_TIME);
|
||||||
@ -236,6 +230,10 @@ public class FlightData {
|
|||||||
double t = event.getTime();
|
double t = event.getTime();
|
||||||
List<Double> velocity = branch.get(FlightDataType.TYPE_VELOCITY_TOTAL);
|
List<Double> velocity = branch.get(FlightDataType.TYPE_VELOCITY_TOTAL);
|
||||||
deploymentVelocity = MathUtil.interpolate( time, velocity, t);
|
deploymentVelocity = MathUtil.interpolate( time, velocity, t);
|
||||||
|
} else if (event.getType() == FlightEvent.Type.GROUND_HIT) {
|
||||||
|
double t = event.getTime();
|
||||||
|
List<Double> velocity = branch.get(FlightDataType.TYPE_VELOCITY_TOTAL);
|
||||||
|
groundHitVelocity = MathUtil.interpolate( time, velocity, t);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
285
core/test/net/sf/openrocket/simulation/TestFlightData.java
Normal file
285
core/test/net/sf/openrocket/simulation/TestFlightData.java
Normal file
@ -0,0 +1,285 @@
|
|||||||
|
package net.sf.openrocket.simulation;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertNotNull;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import net.sf.openrocket.aerodynamics.WarningSet;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests the FlightData object.
|
||||||
|
*
|
||||||
|
* @author Billy Olsen
|
||||||
|
*/
|
||||||
|
public class TestFlightData {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test method for {@link net.sf.openrocket.simulation.FlightData#FlightData()}.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testFlightData() {
|
||||||
|
FlightData data = new FlightData();
|
||||||
|
|
||||||
|
WarningSet warnings = data.getWarningSet();
|
||||||
|
assertNotNull(warnings);
|
||||||
|
assertTrue(warnings.isEmpty());
|
||||||
|
|
||||||
|
assertEquals(0, data.getBranchCount());
|
||||||
|
assertEquals(Double.NaN, data.getDeploymentVelocity(), 0.00);
|
||||||
|
assertEquals(Double.NaN, data.getFlightTime(), 0.00);
|
||||||
|
assertEquals(Double.NaN, data.getGroundHitVelocity(), 0.00);
|
||||||
|
assertEquals(Double.NaN, data.getLaunchRodVelocity(), 0.00);
|
||||||
|
assertEquals(Double.NaN, data.getMaxAcceleration(), 0.00);
|
||||||
|
assertEquals(Double.NaN, data.getMaxAltitude(), 0.00);
|
||||||
|
assertEquals(Double.NaN, data.getMaxMachNumber(), 0.00);
|
||||||
|
assertEquals(Double.NaN, data.getTimeToApogee(), 0.00);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests flight data created from summary data.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testFlightDataFromSummaryData() {
|
||||||
|
double deploymentVelocity = 14.8;
|
||||||
|
double flightTime = 69.1;
|
||||||
|
double groundHitVelocity = 3.4;
|
||||||
|
double launchRodVelocity = 17.5;
|
||||||
|
double maxAcceleration = 156.2;
|
||||||
|
double maxVelocity = 105.9;
|
||||||
|
double maxAltitude = 355.1;
|
||||||
|
double maxMachNumber = 0.31;
|
||||||
|
double timeToApogee = 7.96;
|
||||||
|
|
||||||
|
FlightData data = new FlightData(maxAltitude, maxVelocity, maxAcceleration,
|
||||||
|
maxMachNumber, timeToApogee, flightTime,
|
||||||
|
groundHitVelocity, launchRodVelocity,
|
||||||
|
deploymentVelocity);
|
||||||
|
|
||||||
|
WarningSet warnings = data.getWarningSet();
|
||||||
|
assertNotNull(warnings);
|
||||||
|
assertTrue(warnings.isEmpty());
|
||||||
|
|
||||||
|
assertEquals(0, data.getBranchCount());
|
||||||
|
assertEquals(deploymentVelocity, data.getDeploymentVelocity(), 0.00);
|
||||||
|
assertEquals(flightTime, data.getFlightTime(), 0.00);
|
||||||
|
assertEquals(groundHitVelocity, data.getGroundHitVelocity(), 0.00);
|
||||||
|
assertEquals(launchRodVelocity, data.getLaunchRodVelocity(), 0.00);
|
||||||
|
assertEquals(maxAcceleration, data.getMaxAcceleration(), 0.00);
|
||||||
|
assertEquals(maxAltitude, data.getMaxAltitude(), 0.00);
|
||||||
|
assertEquals(maxMachNumber, data.getMaxMachNumber(), 0.00);
|
||||||
|
assertEquals(timeToApogee, data.getTimeToApogee(), 0.00);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test method for {@link net.sf.openrocket.simulation.FlightData#FlightData(net.sf.openrocket.simulation.FlightDataBranch[])}.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testFlightDataFlightDataBranchArray() {
|
||||||
|
FlightData data = new FlightData(new FlightDataBranch("Test", FlightDataType.TYPE_TIME));
|
||||||
|
|
||||||
|
WarningSet warnings = data.getWarningSet();
|
||||||
|
assertNotNull(warnings);
|
||||||
|
assertTrue(warnings.isEmpty());
|
||||||
|
|
||||||
|
assertEquals(1, data.getBranchCount());
|
||||||
|
|
||||||
|
data = new FlightData(new FlightDataBranch("Test 1", FlightDataType.TYPE_TIME),
|
||||||
|
new FlightDataBranch("Test 2", FlightDataType.TYPE_TIME));
|
||||||
|
|
||||||
|
warnings = data.getWarningSet();
|
||||||
|
assertNotNull(warnings);
|
||||||
|
assertTrue(warnings.isEmpty());
|
||||||
|
|
||||||
|
assertEquals(2, data.getBranchCount());
|
||||||
|
}
|
||||||
|
|
||||||
|
private FlightDataBranch createFlightDataBranch(final String name, final FlightDataType dataType, final double[] values) {
|
||||||
|
final FlightDataBranch branch = new FlightDataBranch(name, dataType);
|
||||||
|
addDataPoints(branch, dataType, values);
|
||||||
|
return branch;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addDataPoints(final FlightDataBranch branch, final FlightDataType dataType, final double[] values) {
|
||||||
|
for (int i=0; i < values.length; i++) {
|
||||||
|
branch.addPoint();
|
||||||
|
branch.setValue(dataType, values[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test method for {@link net.sf.openrocket.simulation.FlightData#getMaxAltitude()}.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testGetMaxAltitudeCalculated() {
|
||||||
|
final double[] altitudes = new double[] {
|
||||||
|
10.5,
|
||||||
|
37.771,
|
||||||
|
37.5,
|
||||||
|
5.1,
|
||||||
|
0.0
|
||||||
|
};
|
||||||
|
FlightDataBranch branch =
|
||||||
|
createFlightDataBranch("Test Max Alt", FlightDataType.TYPE_ALTITUDE, altitudes);
|
||||||
|
|
||||||
|
FlightData data = new FlightData(branch);
|
||||||
|
|
||||||
|
assertEquals(37.771, data.getMaxAltitude(), 0.000);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test method for {@link net.sf.openrocket.simulation.FlightData#getMaxVelocity()}.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testGetMaxVelocityCalculated() {
|
||||||
|
final double[] velocities = new double[] {
|
||||||
|
10.5,
|
||||||
|
23.7,
|
||||||
|
35.5,
|
||||||
|
30.1,
|
||||||
|
0.0
|
||||||
|
};
|
||||||
|
FlightDataBranch branch =
|
||||||
|
createFlightDataBranch("Test Max Velocity", FlightDataType.TYPE_VELOCITY_TOTAL, velocities);
|
||||||
|
|
||||||
|
FlightData data = new FlightData(branch);
|
||||||
|
|
||||||
|
assertEquals(35.5, data.getMaxVelocity(), 0.000);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test method for {@link net.sf.openrocket.simulation.FlightData#getMaxMachNumber()}.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testGetMaxMachNumberCalculated() {
|
||||||
|
final double[] machs = new double[] {
|
||||||
|
0.1,
|
||||||
|
0.2,
|
||||||
|
0.333,
|
||||||
|
0.3,
|
||||||
|
0.1
|
||||||
|
};
|
||||||
|
FlightDataBranch branch =
|
||||||
|
createFlightDataBranch("Test Max Mach", FlightDataType.TYPE_MACH_NUMBER, machs);
|
||||||
|
|
||||||
|
FlightData data = new FlightData(branch);
|
||||||
|
|
||||||
|
assertEquals(0.333, data.getMaxMachNumber(), 0.000);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test method for {@link net.sf.openrocket.simulation.FlightData#getFlightTime()}.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testGetFlightTime() {
|
||||||
|
final double[] times = new double[] {
|
||||||
|
1.0,
|
||||||
|
5.0,
|
||||||
|
15.0,
|
||||||
|
20.1,
|
||||||
|
30.2
|
||||||
|
};
|
||||||
|
FlightDataBranch branch =
|
||||||
|
createFlightDataBranch("Test Flight Time", FlightDataType.TYPE_TIME, times);
|
||||||
|
|
||||||
|
// Flight time is calculated as the last time entry
|
||||||
|
FlightData data = new FlightData(branch);
|
||||||
|
assertEquals(30.2, data.getFlightTime(), 0.000);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test method for {@link net.sf.openrocket.simulation.FlightData#getGroundHitVelocity()}.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testGetGroundHitVelocity() {
|
||||||
|
/*
|
||||||
|
* Setup a flight profile where there is data logged for every second.
|
||||||
|
* The time events will start at 1, rather than 0 so the time into the
|
||||||
|
* data log is the index + 1.0 seconds.
|
||||||
|
*
|
||||||
|
* i.e. at second 1, the velocity becomes 1.2 m/s, the altitude of the
|
||||||
|
* rocket is 1.2, and the LiftOff event is saved.
|
||||||
|
*
|
||||||
|
* This loosely approximates a flight of about 21 seconds where it
|
||||||
|
* flies up quickly and comes down quickly. The actual flight profile
|
||||||
|
* is not as important as the fact that a profile exists.
|
||||||
|
*
|
||||||
|
* Each array is stored as
|
||||||
|
*/
|
||||||
|
final double[] velocities = new double[] {
|
||||||
|
// launch to burn out
|
||||||
|
1.2, 15.0, 31.1, 45.6,
|
||||||
|
// burn out to apogee
|
||||||
|
33.6, 21.2, 14.1, 6.8, 0.0,
|
||||||
|
// apogee to ejection charge
|
||||||
|
2.4, 4.7, 8.6, 9.23,
|
||||||
|
// ejection charge to parachute deployment
|
||||||
|
7.1, 6.2, 6.2, 6.2, 6.2,
|
||||||
|
// parachute deployment to ground hit
|
||||||
|
6.2, 0.0, 0.0
|
||||||
|
};
|
||||||
|
final double[] altitudes = new double[] {
|
||||||
|
// launch to burn out
|
||||||
|
1.2, 16.2, 47.3, 92.9,
|
||||||
|
// burn out to apogee
|
||||||
|
126.5, 147.7, 161.8, 168.6, 168.6,
|
||||||
|
// apogee to ejection charge
|
||||||
|
166.2, 161.5, 152.9, 143.67,
|
||||||
|
// ejection charge to parachute deployment
|
||||||
|
136.57, 113.81, 91.05, 68.29, 45.53,
|
||||||
|
// parachute deployment to ground hit
|
||||||
|
22.77, 0.0, 0.0
|
||||||
|
};
|
||||||
|
final FlightEvent.Type[] eventTypes = new FlightEvent.Type[] {
|
||||||
|
// launch to burn out
|
||||||
|
FlightEvent.Type.LIFTOFF, FlightEvent.Type.LAUNCHROD,
|
||||||
|
FlightEvent.Type.ALTITUDE, FlightEvent.Type.BURNOUT,
|
||||||
|
|
||||||
|
// burn out to apogee
|
||||||
|
FlightEvent.Type.ALTITUDE, FlightEvent.Type.ALTITUDE,
|
||||||
|
FlightEvent.Type.ALTITUDE, FlightEvent.Type.ALTITUDE,
|
||||||
|
FlightEvent.Type.APOGEE,
|
||||||
|
|
||||||
|
// apogee to ejection charge
|
||||||
|
FlightEvent.Type.ALTITUDE, FlightEvent.Type.ALTITUDE,
|
||||||
|
FlightEvent.Type.ALTITUDE, FlightEvent.Type.EJECTION_CHARGE,
|
||||||
|
|
||||||
|
// ejection charge to parachute deployment
|
||||||
|
FlightEvent.Type.ALTITUDE, FlightEvent.Type.RECOVERY_DEVICE_DEPLOYMENT,
|
||||||
|
FlightEvent.Type.ALTITUDE, FlightEvent.Type.ALTITUDE,
|
||||||
|
FlightEvent.Type.ALTITUDE,
|
||||||
|
|
||||||
|
// parachute deployment to ground hit
|
||||||
|
FlightEvent.Type.GROUND_HIT, FlightEvent.Type.ALTITUDE,
|
||||||
|
FlightEvent.Type.SIMULATION_END
|
||||||
|
};
|
||||||
|
|
||||||
|
assertEquals(velocities.length, eventTypes.length);
|
||||||
|
assertEquals(velocities.length, altitudes.length);
|
||||||
|
|
||||||
|
// This flight data branch only needs to record for time,
|
||||||
|
// altitude and velocity.
|
||||||
|
FlightDataBranch branch =
|
||||||
|
new FlightDataBranch("Ground Hit Velocities",
|
||||||
|
FlightDataType.TYPE_TIME,
|
||||||
|
FlightDataType.TYPE_ALTITUDE,
|
||||||
|
FlightDataType.TYPE_VELOCITY_TOTAL);
|
||||||
|
|
||||||
|
for (int i = 0; i < velocities.length; i++) {
|
||||||
|
branch.addPoint();
|
||||||
|
// the data entries are 1 second ahead of the index
|
||||||
|
double time = i + 1.0;
|
||||||
|
branch.setValue(FlightDataType.TYPE_TIME, time);
|
||||||
|
branch.setValue(FlightDataType.TYPE_ALTITUDE, altitudes[i]);
|
||||||
|
branch.setValue(FlightDataType.TYPE_VELOCITY_TOTAL, velocities[i]);
|
||||||
|
branch.addEvent(new FlightEvent(eventTypes[i], time));
|
||||||
|
}
|
||||||
|
|
||||||
|
FlightData data = new FlightData(branch);
|
||||||
|
|
||||||
|
assertEquals(6.2, data.getGroundHitVelocity(), 0.000);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -70,5 +70,14 @@
|
|||||||
<SOURCES />
|
<SOURCES />
|
||||||
</library>
|
</library>
|
||||||
</orderEntry>
|
</orderEntry>
|
||||||
|
<orderEntry type="module-library">
|
||||||
|
<library>
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$MODULE_DIR$/../core/lib/script-api-1.0.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</orderEntry>
|
||||||
</component>
|
</component>
|
||||||
</module>
|
</module>
|
@ -14,7 +14,7 @@
|
|||||||
<classpathentry kind="lib" path="lib/OrangeExtensions-1.2.jar"/>
|
<classpathentry kind="lib" path="lib/OrangeExtensions-1.2.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/jogl/gluegen-rt.jar"/>
|
<classpathentry kind="lib" path="lib/jogl/gluegen-rt.jar"/>
|
||||||
<classpathentry combineaccessrules="false" kind="src" path="/OpenRocket Core"/>
|
<classpathentry combineaccessrules="false" kind="src" path="/OpenRocket Core"/>
|
||||||
<classpathentry kind="lib" path="/OpenRocket Core/lib/slf4j-api-1.7.5.jar"/>
|
<classpathentry kind="lib" path="/OpenRocket Core/lib/slf4j-api-1.7.30.jar"/>
|
||||||
<classpathentry kind="lib" path="/OpenRocket Core/lib/aopalliance.jar"/>
|
<classpathentry kind="lib" path="/OpenRocket Core/lib/aopalliance.jar"/>
|
||||||
<classpathentry kind="lib" path="/OpenRocket Core/lib/javax.inject.jar"/>
|
<classpathentry kind="lib" path="/OpenRocket Core/lib/javax.inject.jar"/>
|
||||||
<classpathentry kind="lib" path="/OpenRocket Core/resources"/>
|
<classpathentry kind="lib" path="/OpenRocket Core/resources"/>
|
||||||
|
@ -71,15 +71,6 @@
|
|||||||
<SOURCES />
|
<SOURCES />
|
||||||
</library>
|
</library>
|
||||||
</orderEntry>
|
</orderEntry>
|
||||||
<orderEntry type="module-library">
|
|
||||||
<library name="slf4j-api-1.7.5.jar">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MODULE_DIR$/../core/lib/slf4j-api-1.7.5.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC />
|
|
||||||
<SOURCES />
|
|
||||||
</library>
|
|
||||||
</orderEntry>
|
|
||||||
<orderEntry type="module-library">
|
<orderEntry type="module-library">
|
||||||
<library name="aopalliance.jar">
|
<library name="aopalliance.jar">
|
||||||
<CLASSES>
|
<CLASSES>
|
||||||
@ -174,5 +165,14 @@
|
|||||||
<SOURCES />
|
<SOURCES />
|
||||||
</library>
|
</library>
|
||||||
</orderEntry>
|
</orderEntry>
|
||||||
|
<orderEntry type="module-library">
|
||||||
|
<library>
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$MODULE_DIR$/../core/lib/slf4j-api-1.7.30.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</orderEntry>
|
||||||
</component>
|
</component>
|
||||||
</module>
|
</module>
|
@ -109,12 +109,11 @@
|
|||||||
<zipfileset src="${lib.dir}/jfreechart-1.0.15.jar"/>
|
<zipfileset src="${lib.dir}/jfreechart-1.0.15.jar"/>
|
||||||
<zipfileset src="${core.dir}/lib/opencsv-4.3.2.jar"/>
|
<zipfileset src="${core.dir}/lib/opencsv-4.3.2.jar"/>
|
||||||
<zipfileset src="${core.dir}/lib/annotation-detector-3.0.5.jar"/>
|
<zipfileset src="${core.dir}/lib/annotation-detector-3.0.5.jar"/>
|
||||||
<zipfileset src="${core.dir}/lib/slf4j-api-1.7.5.jar"/>
|
<zipfileset src="${core.dir}/lib/slf4j-api-1.7.30.jar"/>
|
||||||
<zipfileset src="${core.dir}/lib/logback-classic-1.2.3.jar"/>
|
<zipfileset src="${core.dir}/lib/logback-classic-1.2.3.jar"/>
|
||||||
<zipfileset src="${core.dir}/lib/logback-core-1.2.3.jar"/>
|
<zipfileset src="${core.dir}/lib/logback-core-1.2.3.jar"/>
|
||||||
<zipfileset src="${lib.dir}/rsyntaxtextarea-2.5.6.jar"/>
|
<zipfileset src="${lib.dir}/rsyntaxtextarea-2.5.6.jar"/>
|
||||||
|
|
||||||
|
|
||||||
<!-- JOGL libraries need to be jar-in-jar -->
|
<!-- JOGL libraries need to be jar-in-jar -->
|
||||||
<zipfileset dir="${lib.dir}/jogl" prefix="lib">
|
<zipfileset dir="${lib.dir}/jogl" prefix="lib">
|
||||||
<include name="*.jar"/>
|
<include name="*.jar"/>
|
||||||
|
@ -770,6 +770,8 @@ public class DoubleModel implements StateChangeListener, ChangeSource, Invalidat
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
setMethod.invoke(source, v / multiplier);
|
setMethod.invoke(source, v / multiplier);
|
||||||
|
// Make sure to notify all the listeners that have registered
|
||||||
|
fireStateChanged();
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e) {
|
||||||
throw new BugException("Unable to invoke setMethod of " + this, e);
|
throw new BugException("Unable to invoke setMethod of " + this, e);
|
||||||
} catch (IllegalAccessException e) {
|
} catch (IllegalAccessException e) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user