From: Bill Kuker Date: Tue, 14 Apr 2009 19:06:54 +0000 (+0000) Subject: Added flush and delay. Not so great because they operate on entire grains X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=28cdebefdd09390aea45e4bfeac263e2780747c7;p=sw%2Fmotorsim Added flush and delay. Not so great because they operate on entire grains --- diff --git a/src/com/billkuker/rocketry/motorsim/grain/MultiGrain.java b/src/com/billkuker/rocketry/motorsim/grain/MultiGrain.java index 49433fa..565b15f 100644 --- a/src/com/billkuker/rocketry/motorsim/grain/MultiGrain.java +++ b/src/com/billkuker/rocketry/motorsim/grain/MultiGrain.java @@ -17,21 +17,36 @@ public class MultiGrain implements Grain { private Grain grain; private int count; + private double flush = 1; + private Amount delay = Amount.valueOf(0, SI.MILLIMETER); + public MultiGrain( Grain g, int c ){ grain = g; count = c; } + + private Amount getAdjustedRegression(Amount regression, int grain){ + return regression.minus(delay.times(grain)).times(Math.pow(flush,grain)); + } public Amount surfaceArea(Amount regression) { - return grain.surfaceArea(regression).times(count); + Amount ret = Amount.valueOf(0, SI.SQUARE_METRE); + for ( int i = 0; i < count; i++ ){ + ret = ret.plus(grain.surfaceArea(getAdjustedRegression(regression, i))); + } + return ret; } public Amount volume(Amount regression) { - return grain.volume(regression).times(count); + Amount ret = Amount.valueOf(0, SI.CUBIC_METRE); + for ( int i = 0; i < count; i++ ){ + ret = ret.plus(grain.volume(getAdjustedRegression(regression, i))); + } + return ret; } public Amount webThickness() { - return grain.webThickness(); + return grain.webThickness().plus(delay.times(count)); } public java.awt.geom.Area getCrossSection(Amount regression) { @@ -42,11 +57,11 @@ public class MultiGrain implements Grain { Rectangle2D unburntBounds = grain.getSideView(Amount.valueOf(0, SI.MILLIMETER)).getBounds2D(); java.awt.geom.Area ret = new java.awt.geom.Area(); - java.awt.geom.Area g = grain.getSideView(regression); for ( int i = 0 ; i < count ; i++ ){ - ret.add(g); - ret.transform(AffineTransform.getTranslateInstance(0, unburntBounds.getHeight() + 10)); + java.awt.geom.Area g = grain.getSideView(getAdjustedRegression(regression, i)); + ret.add(g); + ret.transform(AffineTransform.getTranslateInstance(0, -(unburntBounds.getHeight() + 10))); } return ret; }