From d981fef00a82a0fa26849c375c91e820179e8ce9 Mon Sep 17 00:00:00 2001 From: kruland2607 Date: Tue, 24 Apr 2012 18:24:22 +0000 Subject: [PATCH] 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. git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@599 180e2498-e6e9-4542-8430-84ac67f01cd8 --- .../rocketcomponent/RocketComponent.java | 4 ++++ .../openrocket/rocketcomponent/Transition.java | 18 +++++++++--------- .../SymmetricComponentVolumeTest.java | 15 +++++---------- 3 files changed, 18 insertions(+), 19 deletions(-) diff --git a/core/src/net/sf/openrocket/rocketcomponent/RocketComponent.java b/core/src/net/sf/openrocket/rocketcomponent/RocketComponent.java index 7db79d32..cc7ccc3b 100644 --- a/core/src/net/sf/openrocket/rocketcomponent/RocketComponent.java +++ b/core/src/net/sf/openrocket/rocketcomponent/RocketComponent.java @@ -1722,6 +1722,10 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab 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, double length, double density) { return Math.PI * (MathUtil.pow2(outerRadius) - MathUtil.pow2(innerRadius)) * diff --git a/core/src/net/sf/openrocket/rocketcomponent/Transition.java b/core/src/net/sf/openrocket/rocketcomponent/Transition.java index fd52699b..a0759e95 100644 --- a/core/src/net/sf/openrocket/rocketcomponent/Transition.java +++ b/core/src/net/sf/openrocket/rocketcomponent/Transition.java @@ -441,33 +441,33 @@ public class Transition extends SymmetricComponent { addBound(bounds, getLength() + aftShoulderLength, aftShoulderRadius); return bounds; } - + @Override - public double getComponentMass() { - double mass = super.getComponentMass(); + public double getComponentVolume() { + double volume = super.getComponentVolume(); if (getForeShoulderLength() > 0.001) { final double or = getForeShoulderRadius(); final double ir = Math.max(getForeShoulderRadius() - getForeShoulderThickness(), 0); - mass += ringMass(or, ir, getForeShoulderLength(), getMaterial().getDensity()); + volume += ringVolume( or, ir, getForeShoulderLength() ); } if (isForeShoulderCapped()) { final double ir = Math.max(getForeShoulderRadius() - getForeShoulderThickness(), 0); - mass += ringMass(ir, 0, getForeShoulderThickness(), getMaterial().getDensity()); + volume += ringVolume(ir, 0, getForeShoulderThickness() ); } if (getAftShoulderLength() > 0.001) { final double or = getAftShoulderRadius(); final double ir = Math.max(getAftShoulderRadius() - getAftShoulderThickness(), 0); - mass += ringMass(or, ir, getAftShoulderLength(), getMaterial().getDensity()); + volume += ringVolume(or, ir, getAftShoulderLength() ); } if (isAftShoulderCapped()) { 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 public Coordinate getComponentCG() { Coordinate cg = super.getComponentCG(); diff --git a/core/test/net/sf/openrocket/rocketcomponent/SymmetricComponentVolumeTest.java b/core/test/net/sf/openrocket/rocketcomponent/SymmetricComponentVolumeTest.java index 340467a1..e539a84e 100644 --- a/core/test/net/sf/openrocket/rocketcomponent/SymmetricComponentVolumeTest.java +++ b/core/test/net/sf/openrocket/rocketcomponent/SymmetricComponentVolumeTest.java @@ -59,8 +59,7 @@ public class SymmetricComponentVolumeTest extends BaseTestCase { 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 ); } @@ -133,8 +132,7 @@ public class SymmetricComponentVolumeTest extends BaseTestCase { System.out.println( volume ); - // FIXME - //assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume); + assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume); assertEquals( mass, nc.getMass(), epsilonPercent * mass ); } @@ -196,8 +194,7 @@ public class SymmetricComponentVolumeTest extends BaseTestCase { System.out.println( volume ); - // FIXME - //assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume); + assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume); assertEquals( mass, nc.getMass(), epsilonPercent * mass ); } @@ -290,8 +287,7 @@ public class SymmetricComponentVolumeTest extends BaseTestCase { System.out.println( volume ); - // FIXME - //assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume); + assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume); assertEquals( mass, nc.getMass(), epsilonPercent * mass ); } @@ -386,8 +382,7 @@ public class SymmetricComponentVolumeTest extends BaseTestCase { System.out.println( volume ); - // FIXME - //assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume); + assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume); assertEquals( mass, nc.getMass(), epsilonPercent * mass ); } -- 2.39.5