[Major] Fixing Cp Unittests

Implemented unit tests for aerodynamic calculators:
- (new) SymmetricComponentCalcTest
- (new) FinSetCalcTest
- (fixed) BarrowmanCalculatorTest
  -- seems like bad truth values
This commit is contained in:
Daniel_M_Williams 2016-01-03 13:54:59 -05:00
parent c0a372258a
commit 60395b32a3
9 changed files with 337 additions and 145 deletions

View File

@ -42,8 +42,7 @@ public class BarrowmanCalculator extends AbstractAerodynamicCalculator {
private double cacheDiameter = -1;
private double cacheLength = -1;
public boolean debug = false;
public BarrowmanCalculator() {
@ -187,28 +186,29 @@ public class BarrowmanCalculator extends AbstractAerodynamicCalculator {
if (!component.isAerodynamic())
continue;
// Call calculation method
forces.zero();
RocketComponentCalc calcObj = calcMap.get(component);
// vvvv DEBUG vvvv
if (null == calcObj ){
throw new NullPointerException(" Missing mapping: |calcMap|="+calcMap.size()+" for:"+component.toDebugName());
}
// ^^^^ DEBUG ^^^^
calcObj.calculateNonaxialForces(conditions, forces, warnings);
// to account for non axi-symmetric rockets such as
if(( ! component.isAxisymmetric()) &&( component instanceof RingInstanceable )){
RingInstanceable ring = (RingInstanceable)component;
forces.setAxisymmetric(false);
total.setAxisymmetric(false);
// TODO : Implement Best-Case, Worst-Case Cp calculations.... here
double minAngle = ring.getAngularOffset(); // angle of minimum CP, MOI
double maxAngle = minAngle+Math.PI/2; // angle of maximum CP, MOI
}
// // to account for non axi-symmetric rockets such as a Delta-IV heavy, or a Falcon-9 Heavy
// if(( ! component.isAxisymmetric()) &&( component instanceof RingInstanceable )){
// RingInstanceable ring = (RingInstanceable)component;
// forces.setAxisymmetric(false);
// total.setAxisymmetric(false);
//
// // TODO : Implement Best-Case, Worst-Case Cp calculations
// double minAngle = ring.getAngularOffset(); // angle of minimum CP, MOI
// double maxAngle = minAngle+Math.PI/2; // angle of maximum CP, MOI
//
// // worst case: ignore the CP contribution from *twin* externals
// // NYI
//
// // best case: the twins contribute their full CP broadside
// // NYI
//
// }
int instanceCount = component.getLocations().length;
Coordinate x_cp_comp = forces.getCP();

View File

@ -109,9 +109,7 @@ public class FinSetCalc extends RocketComponentCalc {
// One fin without interference (both sub- and supersonic):
double cna1 = calculateFinCNa1(conditions);
// logger.debug("Component cna1 = {}", cna1);
// Multiple fins with fin-fin interference
double cna;
double theta = conditions.getTheta();
@ -164,56 +162,7 @@ public class FinSetCalc extends RocketComponentCalc {
warnings.add(Warning.PARALLEL_FINS);
break;
}
/*
* Used in 0.9.5 and earlier. Takes into account rotation angle for three
* and four fins, does not take into account interference from other fin sets.
*
switch (fins) {
case 1:
case 2:
// from geometry
double mul = 0;
for (int i=0; i < fins; i++) {
mul += MathUtil.pow2(Math.sin(theta - angle));
angle += 2 * Math.PI / fins;
}
cna = cna1*mul;
break;
case 3:
// multiplier 1.5, sinusoidal reduction of 15%
cna = cna1 * 1.5 * (1 - 0.15*pow2(Math.cos(1.5 * (theta-angle))));
break;
case 4:
// multiplier 2.0, sinusoidal reduction of 6%
cna = cna1 * 2.0 * (1 - 0.06*pow2(Math.sin(2 * (theta-angle))));
break;
case 5:
cna = 2.37 * cna1;
break;
case 6:
cna = 2.74 * cna1;
break;
case 7:
cna = 2.99 * cna1;
break;
case 8:
cna = 3.24 * cna1;
break;
default:
// Assume N/2 * 3/4 efficiency for more fins
cna = cna1 * fins * 3.0/8.0;
break;
}
*/
// Body-fin interference effect
double r = bodyRadius;
double tau = r / (span + r);

View File

@ -113,7 +113,7 @@ public class SymmetricComponentCalc extends RocketComponentCalc {
final double A1 = Math.PI * pow2(r1);
cnaCache = 2 * (A1 - A0);
// System.out.println("cnaCache = " + cnaCache);
//System.out.println("cnaCache = " + cnaCache);
cpCache = (length * A1 - fullVolume) / (A1 - A0);
}
}

View File

@ -337,17 +337,17 @@ public class TestRockets {
stage.setName("Stage");
rocket.addChild(stage);
double noseconeLength = 0.06985;
double noseconeRadius = 0.012395;
NoseCone nosecone = new NoseCone(Transition.Shape.ELLIPSOID, noseconeLength, noseconeRadius);
nosecone.setAftShoulderLength(0.02479);
nosecone.setAftShoulderRadius(0.011811);
double noseconeLength = 0.07;
double noseconeRadius = 0.012;
NoseCone nosecone = new NoseCone(Transition.Shape.OGIVE, noseconeLength, noseconeRadius);
nosecone.setAftShoulderLength(0.025);
nosecone.setAftShoulderRadius(0.012);
nosecone.setName("Nose Cone");
stage.addChild(nosecone);
double bodytubeLength = 0.19685;
double bodytubeRadius = 0.012395;
double bodytubeThickness = 0.00033;
double bodytubeLength = 0.20;
double bodytubeRadius = 0.012;
double bodytubeThickness = 0.0003;
BodyTube bodytube = new BodyTube(bodytubeLength, bodytubeRadius, bodytubeThickness);
bodytube.setName("Body Tube");
stage.addChild(bodytube);
@ -355,12 +355,12 @@ public class TestRockets {
TrapezoidFinSet finset;
{
int finCount = 3;
double finRootChord = .05715;
double finTipChord = .03048;
double finSweep = 0.06985455;
double finHeight = 0.04064;
double finRootChord = .05;
double finTipChord = .03;
double finSweep = 0.02;
double finHeight = 0.05;
finset = new TrapezoidFinSet(finCount, finRootChord, finTipChord, finSweep, finHeight);
finset.setThickness( 0.003175);
finset.setThickness( 0.0032);
finset.setRelativePosition(Position.BOTTOM);
finset.setName("3 Fin Set");
bodytube.addChild(finset);
@ -368,18 +368,18 @@ public class TestRockets {
LaunchLug lug = new LaunchLug();
lug.setName("Launch Lugs");
lug.setRelativePosition(Position.TOP);
lug.setAxialOffset(0.111125);
lug.setLength(0.0508);
lug.setOuterRadius(0.002185);
lug.setInnerRadius(0.001981);
lug.setAxialOffset(0.111);
lug.setLength(0.050);
lug.setOuterRadius(0.0022);
lug.setInnerRadius(0.0020);
bodytube.addChild(lug);
InnerTube inner = new InnerTube();
inner.setRelativePosition(Position.TOP);
inner.setAxialOffset(0.13335);
inner.setLength(0.06985);
inner.setOuterRadius(0.009347);
inner.setThickness(0.00033);
inner.setAxialOffset(0.133);
inner.setLength(0.07);
inner.setOuterRadius(0.009);
inner.setThickness(0.0003);
inner.setMotorMount(true);
inner.setName("Motor Mount Tube");
bodytube.addChild(inner);
@ -389,9 +389,9 @@ public class TestRockets {
EngineBlock thrustBlock= new EngineBlock();
thrustBlock.setRelativePosition(Position.TOP);
thrustBlock.setAxialOffset(0.0);
thrustBlock.setLength(0.005004);
thrustBlock.setOuterRadius(0.0090169);
thrustBlock.setThickness(0.00075);
thrustBlock.setLength(0.005);
thrustBlock.setOuterRadius(0.009);
thrustBlock.setThickness(0.0008);
thrustBlock.setName("Engine Block");
inner.addChild(thrustBlock);
@ -406,8 +406,8 @@ public class TestRockets {
Parachute chute = new Parachute();
chute.setRelativePosition(Position.TOP);
chute.setName("Parachute");
chute.setAxialOffset(0.028575);
chute.setOverrideMass(0.002041);
chute.setAxialOffset(0.028);
chute.setOverrideMass(0.002);
chute.setMassOverridden(true);
bodytube.addChild(chute);
@ -415,8 +415,8 @@ public class TestRockets {
CenteringRing centerings = new CenteringRing();
centerings.setName("Centering Rings");
centerings.setRelativePosition(Position.TOP);
centerings.setAxialOffset(0.1397);
centerings.setLength(0.00635);
centerings.setAxialOffset(0.14);
centerings.setLength(0.006);
centerings.setInstanceCount(2);
centerings.setInstanceSeparation(0.035);
bodytube.addChild(centerings);

View File

@ -14,18 +14,19 @@ import com.google.inject.Module;
import net.sf.openrocket.ServicesForTesting;
import net.sf.openrocket.plugin.PluginModule;
import net.sf.openrocket.rocketcomponent.AxialStage;
import net.sf.openrocket.rocketcomponent.BodyTube;
import net.sf.openrocket.rocketcomponent.FlightConfiguration;
import net.sf.openrocket.rocketcomponent.NoseCone;
import net.sf.openrocket.rocketcomponent.ParallelStage;
import net.sf.openrocket.rocketcomponent.Rocket;
import net.sf.openrocket.rocketcomponent.Transition;
import net.sf.openrocket.startup.Application;
import net.sf.openrocket.util.Coordinate;
import net.sf.openrocket.util.MathUtil;
import net.sf.openrocket.util.TestRockets;
public class BarrowmanCalculatorTest {
protected final double EPSILON = MathUtil.EPSILON;
protected final double EPSILON = 0.00001;
private static Injector injector;
@ -48,18 +49,44 @@ public class BarrowmanCalculatorTest {
@Test
public void testCPSimpleDry() {
Rocket rocket = TestRockets.makeEstesAlphaIII();
AxialStage stage = (AxialStage)rocket.getChild(0);
FlightConfiguration config = rocket.getSelectedConfiguration();
AerodynamicCalculator calc = new BarrowmanCalculator();
BarrowmanCalculator calc = new BarrowmanCalculator();
FlightConditions conditions = new FlightConditions(config);
WarningSet warnings = new WarningSet();
// calculated from OpenRocket 15.03
double expCPx = 0.225; // cm
Coordinate calcCP = calc.getCP(config, conditions, warnings);
// By Hand: i.e. Manually calculate the Barrowman numbers
double exp_cna;
double exp_cpx;
{
NoseCone nose = (NoseCone)stage.getChild(0);
assertEquals(" Estes Alpha III nose cone has incorrect length:", 0.07, nose.getLength(), EPSILON);
assertEquals(" Estes Alpha III nosecone has wrong (base) radius:", 0.012, nose.getAftRadius(), EPSILON);
assertEquals(" Estes Alpha III nosecone has wrong type:", Transition.Shape.OGIVE, nose.getType());
double cna_nose = 2;
double cpx_nose = 0.03235;
double cna_body=0; // equal-to-zero, see [Barrowman66] p15.
double cpx_body=0;
double cna_3fin = 24.146933;
double cpx_3fin = 0.0193484;
double fin_x = 0.22;
cpx_3fin += fin_x;
double cna_lugs=0; // n/a
double cpx_lugs=0; // n/a
// N.B. CP @ AoA = zero
exp_cna = cna_nose + cna_body + cna_3fin + cna_lugs;
exp_cpx = ( cna_nose*cpx_nose + cna_body*cpx_body + cna_3fin*cpx_3fin + cna_lugs*cpx_lugs)/exp_cna;
}
assertEquals(" Estes Alpha III cp x value is incorrect:", expCPx, calcCP.x, EPSILON);
Coordinate expCP = new Coordinate(expCPx, 0,0,0);
assertEquals(" Estes Alpha III CP is incorrect:", expCP, calcCP);
// calculated from OpenRocket 15.03
Coordinate cp_calc = calc.getCP(config, conditions, warnings);
assertEquals(" Estes Alpha III CNa value is incorrect:", exp_cna, cp_calc.weight, EPSILON);
assertEquals(" Estes Alpha III cp x value is incorrect:", exp_cpx, cp_calc.x, EPSILON);
}
@Test
@ -71,15 +98,15 @@ public class BarrowmanCalculatorTest {
WarningSet warnings = new WarningSet();
// calculated from OpenRocket 15.03
double expCPx = 0.225; // cm
/// this is what the
// calculated from OpenRocket 15.03:
//double expCPx = 0.225;
// verified from the equations:
double expCPx = 0.2235154;
double exp_cna = 26.146933;
Coordinate calcCP = calc.getCP(config, conditions, warnings);
assertEquals(" Estes Alpha III cp x value is incorrect:", expCPx, calcCP.x, EPSILON);
Coordinate expCP = new Coordinate(expCPx, 0,0,0);
assertEquals(" Estes Alpha III CP is incorrect:", expCP, calcCP);
fail("Not yet implemented");
assertEquals(" Estes Alpha III CNa value is incorrect:", exp_cna, calcCP.weight, EPSILON);
}
@ -91,20 +118,31 @@ public class BarrowmanCalculatorTest {
FlightConditions conditions = new FlightConditions(config);
WarningSet warnings = new WarningSet();
calc.debug = true;
// calculated from OpenRocket 15.03
double expCPx = 0.225; // cm
// no clue:
double expCPx = 1.0367644;
double expCNa = 14.169;
Coordinate calcCP = calc.getCP(config, conditions, warnings);
fail("NYI");
assertEquals(" Falcon Heavy CP x value is incorrect:", expCPx, calcCP.x, EPSILON);
Coordinate expCP = new Coordinate(expCPx, 0,0,0);
assertEquals(" Falcon Heavy CP is incorrect:", expCP, calcCP);
assertEquals(" Falcon 9 Heavy CP x value is incorrect:", expCPx, calcCP.x, EPSILON);
assertEquals(" Falcon 9 Heavy CNa value is incorrect:", expCNa, calcCP.weight, EPSILON);
}
@Test
public void testGetWorstCP() {
fail("Not yet implemented");
Rocket rocket = TestRockets.makeFalcon9Heavy();
FlightConfiguration config = rocket.getSelectedConfiguration();
BarrowmanCalculator calc = new BarrowmanCalculator();
FlightConditions conditions = new FlightConditions(config);
WarningSet warnings = new WarningSet();
// Coordinate calcBestCP = calc.getCP(config, conditions, warnings);
// Coordinate calcWorstCP = calc.getWorstCP(config, conditions, warnings);
//fail("Not yet implemented");
// Coordinate expBestCP = new Coordinate( -1, 0,0,0);
// assertEquals(" Falcon Heavy best CP x value is incorrect:", expBestCP.x, calcBestCP.x, EPSILON);
// Coordinate expWorstCP = new Coordinate( -1, 0,0,0);
// assertEquals(" Falcon Heavy Worst CP x value is incorrect:", expWorstCP.x, calcWorstCP.x, EPSILON);
}
@Test

View File

@ -0,0 +1,105 @@
package net.sf.openrocket.aerodynamics;
import static org.junit.Assert.assertEquals;
import org.junit.BeforeClass;
import org.junit.Test;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Module;
import net.sf.openrocket.ServicesForTesting;
import net.sf.openrocket.aerodynamics.barrowman.FinSetCalc;
import net.sf.openrocket.plugin.PluginModule;
import net.sf.openrocket.rocketcomponent.FlightConfiguration;
import net.sf.openrocket.rocketcomponent.Rocket;
import net.sf.openrocket.rocketcomponent.TrapezoidFinSet;
import net.sf.openrocket.startup.Application;
import net.sf.openrocket.util.TestRockets;
public class FinSetCalcTest {
protected final double EPSILON = 0.0001;
private static Injector injector;
@BeforeClass
public static void setup() {
Module applicationModule = new ServicesForTesting();
Module pluginModule = new PluginModule();
injector = Guice.createInjector( applicationModule, pluginModule);
Application.setInjector(injector);
// {
// GuiModule guiModule = new GuiModule();
// Module pluginModule = new PluginModule();
// Injector injector = Guice.createInjector(guiModule, pluginModule);
// Application.setInjector(injector);
// }
}
@Test
public void test3Fin() {
Rocket rocket = TestRockets.makeEstesAlphaIII();
TrapezoidFinSet fins = (TrapezoidFinSet)rocket.getChild(0).getChild(1).getChild(0);
// to make the fin properties explicit
assertEquals(" Estes Alpha III fins have wrong count:", 3, fins.getFinCount(), EPSILON);
assertEquals(" Estes Alpha III fins have wrong root chord:", 0.05, fins.getRootChord(), EPSILON);
assertEquals(" Estes Alpha III fins have wrong tip chord:", 0.03, fins.getTipChord(), EPSILON);
assertEquals(" Estes Alpha III fins have wrong sweep: ", 0.02, fins.getSweep(), EPSILON);
assertEquals(" Estes Alpha III fins have wrong height: ", 0.05, fins.getHeight(), EPSILON);
FlightConfiguration config = rocket.getSelectedConfiguration();
FlightConditions conditions = new FlightConditions(config);
WarningSet warnings = new WarningSet();
AerodynamicForces forces = new AerodynamicForces();
FinSetCalc calcObj = new FinSetCalc( fins );
// vvv TEST MEH! vvv
calcObj.calculateNonaxialForces(conditions, forces, warnings);
// ^^^
double exp_cna_fins = 24.146933;
double exp_cpx_fins = 0.0193484;
assertEquals(" FinSetCalc produces bad CNa: ", exp_cna_fins, forces.getCNa(), EPSILON);
assertEquals(" FinSetCalc produces bad C_p.x: ", exp_cpx_fins, forces.getCP().x, EPSILON);
assertEquals(" FinSetCalc produces bad CN: ", 0.0, forces.getCN(), EPSILON);
assertEquals(" FinSetCalc produces bad C_m: ", 0.0, forces.getCm(), EPSILON);
}
@Test
public void test4Fin() {
Rocket rocket = TestRockets.makeEstesAlphaIII();
TrapezoidFinSet fins = (TrapezoidFinSet)rocket.getChild(0).getChild(1).getChild(0);
fins.setFinCount(4);
// to make the fin properties explicit
assertEquals(" Estes Alpha III fins have wrong count:", 4, fins.getFinCount(), EPSILON);
assertEquals(" Estes Alpha III fins have wrong root chord:", 0.05, fins.getRootChord(), EPSILON);
assertEquals(" Estes Alpha III fins have wrong tip chord:", 0.03, fins.getTipChord(), EPSILON);
assertEquals(" Estes Alpha III fins have wrong sweep: ", 0.02, fins.getSweep(), EPSILON);
assertEquals(" Estes Alpha III fins have wrong height: ", 0.05, fins.getHeight(), EPSILON);
FlightConfiguration config = rocket.getSelectedConfiguration();
FlightConditions conditions = new FlightConditions(config);
WarningSet warnings = new WarningSet();
AerodynamicForces forces = new AerodynamicForces();
FinSetCalc calcObj = new FinSetCalc( fins );
// vvv TEST MEH! vvv
calcObj.calculateNonaxialForces(conditions, forces, warnings);
// ^^^
double exp_cna_fins = 32.195911;
double exp_cpx_fins = 0.0193484;
assertEquals(" FinSetCalc produces bad CNa: ", exp_cna_fins, forces.getCNa(), EPSILON);
assertEquals(" FinSetCalc produces bad C_p.x: ", exp_cpx_fins, forces.getCP().x, EPSILON);
assertEquals(" FinSetCalc produces bad CN: ", 0.0, forces.getCN(), EPSILON);
assertEquals(" FinSetCalc produces bad C_m: ", 0.0, forces.getCm(), EPSILON);
}
}

View File

@ -0,0 +1,103 @@
package net.sf.openrocket.aerodynamics;
import static org.junit.Assert.assertEquals;
import org.junit.BeforeClass;
import org.junit.Test;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Module;
import net.sf.openrocket.ServicesForTesting;
import net.sf.openrocket.aerodynamics.barrowman.SymmetricComponentCalc;
import net.sf.openrocket.plugin.PluginModule;
import net.sf.openrocket.rocketcomponent.FlightConfiguration;
import net.sf.openrocket.rocketcomponent.NoseCone;
import net.sf.openrocket.rocketcomponent.Rocket;
import net.sf.openrocket.rocketcomponent.Transition;
import net.sf.openrocket.startup.Application;
import net.sf.openrocket.util.MathUtil;
import net.sf.openrocket.util.TestRockets;
public class SymmetricComponentCalcTest {
protected final double EPSILON = MathUtil.EPSILON*1000;
private static Injector injector;
@BeforeClass
public static void setup() {
Module applicationModule = new ServicesForTesting();
Module pluginModule = new PluginModule();
injector = Guice.createInjector( applicationModule, pluginModule);
Application.setInjector(injector);
// {
// GuiModule guiModule = new GuiModule();
// Module pluginModule = new PluginModule();
// Injector injector = Guice.createInjector(guiModule, pluginModule);
// Application.setInjector(injector);
// }
}
@Test
public void testConicalNoseParams() {
Rocket rocket = TestRockets.makeEstesAlphaIII();
NoseCone nose = (NoseCone)rocket.getChild(0).getChild(0);
nose.setType( Transition.Shape.CONICAL );
// to illustrate the NoseCone properties to the reader:
assertEquals(" Estes Alpha III nose cone has incorrect length:", 0.07, nose.getLength(), EPSILON);
assertEquals(" Estes Alpha III nosecone has wrong (base) radius:", 0.012, nose.getAftRadius(), EPSILON);
assertEquals(" Estes Alpha III nosecone has wrong type:", Transition.Shape.CONICAL, nose.getType());
FlightConfiguration config = rocket.getSelectedConfiguration();
FlightConditions conditions = new FlightConditions(config);
WarningSet warnings = new WarningSet();
AerodynamicForces forces = new AerodynamicForces();
SymmetricComponentCalc calcObj = new SymmetricComponentCalc( nose );
conditions.setAOA(0.0);
// vvv TEST MEH! vvv
calcObj.calculateNonaxialForces(conditions, forces, warnings);
// ^^^
double cna_nose = 2;
double cpx_nose = 2.0/3.0*nose.getLength();
assertEquals(" SymmetricComponentCalc produces bad CNa: ", cna_nose, forces.getCNa(), EPSILON);
assertEquals(" SymmetricComponentCalc produces bad C_p.x: ", cpx_nose, forces.getCP().x, EPSILON);
assertEquals(" SymmetricComponentCalc produces bad CN: ", 0.0, forces.getCN(), EPSILON);
assertEquals(" SymmetricComponentCalc produces bad C_m: ", 0.0, forces.getCm(), EPSILON);
}
@Test
public void testOgiveNoseParams() {
Rocket rocket = TestRockets.makeEstesAlphaIII();
NoseCone nose = (NoseCone)rocket.getChild(0).getChild(0);
// to illustrate the NoseCone properties to the reader:
assertEquals(" Estes Alpha III nose cone has incorrect length:", 0.07, nose.getLength(), EPSILON);
assertEquals(" Estes Alpha III nosecone has wrong (base) radius:", 0.012, nose.getAftRadius(), EPSILON);
assertEquals(" Estes Alpha III nosecone has wrong type:", Transition.Shape.OGIVE, nose.getType());
FlightConfiguration config = rocket.getSelectedConfiguration();
FlightConditions conditions = new FlightConditions(config);
WarningSet warnings = new WarningSet();
AerodynamicForces forces = new AerodynamicForces();
SymmetricComponentCalc calcObj = new SymmetricComponentCalc( nose );
conditions.setAOA(0.0);
// vvv TEST vvv
calcObj.calculateNonaxialForces(conditions, forces, warnings);
// ^^^ ^^^
double l_nose = nose.getLength();
double cna_nose = 2;
double cpx_nose = 0.46216*l_nose;
assertEquals(" SymmetricComponentCalc produces bad CNa: ", cna_nose, forces.getCNa(), EPSILON);
assertEquals(" SymmetricComponentCalc produces bad C_p.x:", cpx_nose, forces.getCP().x, EPSILON);
assertEquals(" SymmetricComponentCalc produces bad CN: ", 0.0, forces.getCN(), EPSILON);
assertEquals(" SymmetricComponentCalc produces bad C_m: ", 0.0, forces.getCm(), EPSILON);
}
}

View File

@ -21,7 +21,7 @@ public class LaunchLugTest extends BaseTestCase {
lug.setInstanceSeparation(0.05);
lug.setInstanceCount(2);
double expX = 0.111125 + body.getLocations()[0].x;
double expX = 0.111 + body.getLocations()[0].x;
double expR = body.getOuterRadius()+lug.getOuterRadius();
Coordinate expPos = new Coordinate( expX, expR, 0, 0);
Coordinate actPos[] = lug.getLocations();
@ -50,8 +50,8 @@ public class LaunchLugTest extends BaseTestCase {
//System.err.println(treeDump);
double expX = 0.111125 + body.getLocations()[0].x;
double expR = 0.015376;
double expX = 0.111 + body.getLocations()[0].x;
double expR = 0.015;
double expY = Math.cos(startAngle)*expR ;
double expZ = Math.sin(startAngle)*expR ;
Coordinate expPos = new Coordinate( expX, expY, expZ, 0);

View File

@ -85,28 +85,28 @@ public class RocketTest extends BaseTestCase {
assertThat(cc.getName()+" not positioned correctly: ", actLoc, equalTo(expLoc));
cc = body;
expLoc = new Coordinate(0.06985,0,0);
expLoc = new Coordinate(0.07,0,0);
actLoc = cc.getLocations()[0];
assertThat(cc.getName()+" not positioned correctly: ", actLoc, equalTo(expLoc));
{
cc = fins;
expLoc = new Coordinate(0.20955,0,0);
expLoc = new Coordinate(0.22,0,0);
actLoc = cc.getLocations()[0];
assertThat(cc.getName()+" not positioned correctly: ", actLoc, equalTo(expLoc));
cc = lug;
expLoc = new Coordinate(0.180975, 0.015376, 0);
expLoc = new Coordinate(0.181, 0.015, 0);
actLoc = cc.getLocations()[0];
assertThat(cc.getName()+" not positioned correctly: ", actLoc, equalTo(expLoc));
cc = mmt;
expLoc = new Coordinate(0.2032,0,0);
expLoc = new Coordinate(0.203,0,0);
actLoc = cc.getLocations()[0];
assertThat(cc.getName()+" not positioned correctly: ", actLoc, equalTo(expLoc));
{
cc = block;
expLoc = new Coordinate(0.2032,0,0);
expLoc = new Coordinate(0.203,0,0);
actLoc = cc.getLocations()[0];
assertThat(cc.getName()+" not positioned correctly: ", actLoc, equalTo(expLoc));
}
@ -114,7 +114,7 @@ public class RocketTest extends BaseTestCase {
}
cc = chute;
expLoc = new Coordinate(0.098425,0,0);
expLoc = new Coordinate(0.098,0,0);
actLoc = cc.getLocations()[0];
assertThat(cc.getName()+" not positioned correctly: ", actLoc, equalTo(expLoc));
@ -122,7 +122,7 @@ public class RocketTest extends BaseTestCase {
assertThat(cc.getName()+" not instanced correctly: ", cc.getInstanceCount(), equalTo(2));
// singleton instances follow different code paths
center.setInstanceCount(1);
expLoc = new Coordinate(0.20955,0,0);
expLoc = new Coordinate(0.21,0,0);
actLoc = cc.getLocations()[0];
assertEquals(" position x fail: ", expLoc.x, actLoc.x, EPSILON);
assertEquals(" position y fail: ", expLoc.y, actLoc.y, EPSILON);
@ -132,20 +132,17 @@ public class RocketTest extends BaseTestCase {
cc = center;
center.setInstanceCount(2);
Coordinate actLocs[] = cc.getLocations();
expLoc = new Coordinate(0.20955,0,0);
actLoc = actLocs[0];
// assertEquals(" position x fail: ", expLoc.x, actLoc.x, EPSILON);
// assertEquals(" position y fail: ", expLoc.y, actLoc.y, EPSILON);
// assertEquals(" position z fail: ", expLoc.z, actLoc.z, EPSILON);
assertThat(cc.getName()+" not positioned correctly: ", actLoc, equalTo(expLoc));
{ // second instance
expLoc = new Coordinate(0.24455, 0, 0);
actLoc = actLocs[1];
{ // first instance
// assertEquals(" position x fail: ", expLoc.x, actLoc.x, EPSILON);
// assertEquals(" position y fail: ", expLoc.y, actLoc.y, EPSILON);
// assertEquals(" position z fail: ", expLoc.z, actLoc.z, EPSILON);
expLoc = new Coordinate(0.21, 0, 0);
actLoc = actLocs[0];
assertThat(cc.getName()+" not positioned correctly: ", actLoc, equalTo(expLoc));
}
{ // second instance
assertThat(cc.getName()+" not instanced correctly: ", cc.getInstanceCount(), equalTo(2));
expLoc = new Coordinate(0.24455, 0, 0);
expLoc = new Coordinate(0.245, 0, 0);
actLoc = actLocs[1];
assertThat(cc.getName()+" not positioned correctly: ", actLoc, equalTo(expLoc));
}