]> git.gag.com Git - sw/motorsim/commitdiff
Added flush and delay. Not so great because they operate on entire grains
authorBill Kuker <bkuker@billkuker.com>
Tue, 14 Apr 2009 19:06:54 +0000 (19:06 +0000)
committerBill Kuker <bkuker@billkuker.com>
Tue, 14 Apr 2009 19:06:54 +0000 (19:06 +0000)
src/com/billkuker/rocketry/motorsim/grain/MultiGrain.java

index 49433fa841ea6a2f0b41423416df07b3bdde6ab8..565b15fa93356156d336b2854d88d9f06a914589 100644 (file)
@@ -17,21 +17,36 @@ public class MultiGrain implements Grain {
        private Grain grain;\r
        private int count;\r
        \r
+       private double flush = 1;\r
+       private Amount<Length> delay = Amount.valueOf(0, SI.MILLIMETER);\r
+       \r
        public MultiGrain( Grain g, int c ){\r
                grain = g;\r
                count = c;\r
        }\r
+       \r
+       private Amount<Length> getAdjustedRegression(Amount<Length> regression, int grain){\r
+               return regression.minus(delay.times(grain)).times(Math.pow(flush,grain));\r
+       }\r
 \r
        public Amount<Area> surfaceArea(Amount<Length> regression) {\r
-               return grain.surfaceArea(regression).times(count);\r
+               Amount<Area> ret = Amount.valueOf(0, SI.SQUARE_METRE);\r
+               for ( int i = 0; i < count; i++ ){\r
+                       ret = ret.plus(grain.surfaceArea(getAdjustedRegression(regression, i)));\r
+               }\r
+               return ret;\r
        }\r
 \r
        public Amount<Volume> volume(Amount<Length> regression) {\r
-               return grain.volume(regression).times(count);\r
+               Amount<Volume> ret = Amount.valueOf(0, SI.CUBIC_METRE);\r
+               for ( int i = 0; i < count; i++ ){\r
+                       ret = ret.plus(grain.volume(getAdjustedRegression(regression, i)));\r
+               }\r
+               return ret;\r
        }\r
 \r
        public Amount<Length> webThickness() {\r
-               return grain.webThickness();\r
+               return grain.webThickness().plus(delay.times(count));\r
        }\r
 \r
        public java.awt.geom.Area getCrossSection(Amount<Length> regression) {\r
@@ -42,11 +57,11 @@ public class MultiGrain implements Grain {
                Rectangle2D unburntBounds = grain.getSideView(Amount.valueOf(0, SI.MILLIMETER)).getBounds2D();\r
                \r
                java.awt.geom.Area ret = new java.awt.geom.Area();\r
-               java.awt.geom.Area g = grain.getSideView(regression);\r
 \r
                for ( int i = 0 ; i < count ; i++ ){\r
-                       ret.add(g);\r
-                       ret.transform(AffineTransform.getTranslateInstance(0, unburntBounds.getHeight() + 10));\r
+                       java.awt.geom.Area g = grain.getSideView(getAdjustedRegression(regression, i));\r
+                       ret.add(g);     \r
+                       ret.transform(AffineTransform.getTranslateInstance(0, -(unburntBounds.getHeight() + 10)));\r
                }\r
                return ret;\r
        }\r