Change the implementation of Transition getComponentVolume to include the volumes of the shoulders as well as the main body. This means that Transition no longer needs to override getComponentMass since the default implementation of density * volume now works correctly.
Added helper function to RocketComponent to compute the volume of a ring component by computing the "mass" with density of 1.0.
This commit is contained in:
parent
40b28eeb3a
commit
4731a7345d
@ -1722,6 +1722,10 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
|||||||
ringMass(outerRadius, innerRadius, x2 - x1, density));
|
ringMass(outerRadius, innerRadius, x2 - x1, density));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected static final double ringVolume( double outerRadius, double innerRadius, double length ) {
|
||||||
|
return ringMass( outerRadius, innerRadius, length, 1.0 );
|
||||||
|
}
|
||||||
|
|
||||||
protected static final double ringMass(double outerRadius, double innerRadius,
|
protected static final double ringMass(double outerRadius, double innerRadius,
|
||||||
double length, double density) {
|
double length, double density) {
|
||||||
return Math.PI * (MathUtil.pow2(outerRadius) - MathUtil.pow2(innerRadius)) *
|
return Math.PI * (MathUtil.pow2(outerRadius) - MathUtil.pow2(innerRadius)) *
|
||||||
|
@ -441,33 +441,33 @@ public class Transition extends SymmetricComponent {
|
|||||||
addBound(bounds, getLength() + aftShoulderLength, aftShoulderRadius);
|
addBound(bounds, getLength() + aftShoulderLength, aftShoulderRadius);
|
||||||
return bounds;
|
return bounds;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getComponentMass() {
|
public double getComponentVolume() {
|
||||||
double mass = super.getComponentMass();
|
double volume = super.getComponentVolume();
|
||||||
if (getForeShoulderLength() > 0.001) {
|
if (getForeShoulderLength() > 0.001) {
|
||||||
final double or = getForeShoulderRadius();
|
final double or = getForeShoulderRadius();
|
||||||
final double ir = Math.max(getForeShoulderRadius() - getForeShoulderThickness(), 0);
|
final double ir = Math.max(getForeShoulderRadius() - getForeShoulderThickness(), 0);
|
||||||
mass += ringMass(or, ir, getForeShoulderLength(), getMaterial().getDensity());
|
volume += ringVolume( or, ir, getForeShoulderLength() );
|
||||||
}
|
}
|
||||||
if (isForeShoulderCapped()) {
|
if (isForeShoulderCapped()) {
|
||||||
final double ir = Math.max(getForeShoulderRadius() - getForeShoulderThickness(), 0);
|
final double ir = Math.max(getForeShoulderRadius() - getForeShoulderThickness(), 0);
|
||||||
mass += ringMass(ir, 0, getForeShoulderThickness(), getMaterial().getDensity());
|
volume += ringVolume(ir, 0, getForeShoulderThickness() );
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getAftShoulderLength() > 0.001) {
|
if (getAftShoulderLength() > 0.001) {
|
||||||
final double or = getAftShoulderRadius();
|
final double or = getAftShoulderRadius();
|
||||||
final double ir = Math.max(getAftShoulderRadius() - getAftShoulderThickness(), 0);
|
final double ir = Math.max(getAftShoulderRadius() - getAftShoulderThickness(), 0);
|
||||||
mass += ringMass(or, ir, getAftShoulderLength(), getMaterial().getDensity());
|
volume += ringVolume(or, ir, getAftShoulderLength() );
|
||||||
}
|
}
|
||||||
if (isAftShoulderCapped()) {
|
if (isAftShoulderCapped()) {
|
||||||
final double ir = Math.max(getAftShoulderRadius() - getAftShoulderThickness(), 0);
|
final double ir = Math.max(getAftShoulderRadius() - getAftShoulderThickness(), 0);
|
||||||
mass += ringMass(ir, 0, getAftShoulderThickness(), getMaterial().getDensity());
|
volume += ringVolume(ir, 0, getAftShoulderThickness() );
|
||||||
}
|
}
|
||||||
|
|
||||||
return mass;
|
return volume;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Coordinate getComponentCG() {
|
public Coordinate getComponentCG() {
|
||||||
Coordinate cg = super.getComponentCG();
|
Coordinate cg = super.getComponentCG();
|
||||||
|
@ -59,8 +59,7 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
|
|||||||
|
|
||||||
System.out.println( volume + "\t" + mass );
|
System.out.println( volume + "\t" + mass );
|
||||||
|
|
||||||
// FIXME
|
assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume);
|
||||||
//assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume);
|
|
||||||
assertEquals( mass, nc.getMass(), epsilonPercent * mass );
|
assertEquals( mass, nc.getMass(), epsilonPercent * mass );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -133,8 +132,7 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
|
|||||||
|
|
||||||
System.out.println( volume );
|
System.out.println( volume );
|
||||||
|
|
||||||
// FIXME
|
assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume);
|
||||||
//assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume);
|
|
||||||
assertEquals( mass, nc.getMass(), epsilonPercent * mass );
|
assertEquals( mass, nc.getMass(), epsilonPercent * mass );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -196,8 +194,7 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
|
|||||||
|
|
||||||
System.out.println( volume );
|
System.out.println( volume );
|
||||||
|
|
||||||
// FIXME
|
assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume);
|
||||||
//assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume);
|
|
||||||
assertEquals( mass, nc.getMass(), epsilonPercent * mass );
|
assertEquals( mass, nc.getMass(), epsilonPercent * mass );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -290,8 +287,7 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
|
|||||||
|
|
||||||
System.out.println( volume );
|
System.out.println( volume );
|
||||||
|
|
||||||
// FIXME
|
assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume);
|
||||||
//assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume);
|
|
||||||
assertEquals( mass, nc.getMass(), epsilonPercent * mass );
|
assertEquals( mass, nc.getMass(), epsilonPercent * mass );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -386,8 +382,7 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
|
|||||||
|
|
||||||
System.out.println( volume );
|
System.out.println( volume );
|
||||||
|
|
||||||
// FIXME
|
assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume);
|
||||||
//assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume);
|
|
||||||
assertEquals( mass, nc.getMass(), epsilonPercent * mass );
|
assertEquals( mass, nc.getMass(), epsilonPercent * mass );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user