]> git.gag.com Git - sw/motorsim/commitdiff
Supports N grains, not 2
authorBill Kuker <bkuker@billkuker.com>
Sun, 12 Apr 2009 03:54:23 +0000 (03:54 +0000)
committerBill Kuker <bkuker@billkuker.com>
Sun, 12 Apr 2009 03:54:23 +0000 (03:54 +0000)
src/com/billkuker/rocketry/motorsim/grain/CompoundGrain.java

index 161045333a109e700f9586e3e154f084fc4a233c..2eb5fb5523932944cf2bda34c06cc73bc36ad7fb 100644 (file)
@@ -1,9 +1,12 @@
 package com.billkuker.rocketry.motorsim.grain;\r
 \r
 import java.awt.geom.Area;\r
+import java.util.HashSet;\r
+import java.util.Set;\r
 \r
 import javax.measure.quantity.Length;\r
 import javax.measure.quantity.Volume;\r
+import javax.measure.unit.SI;\r
 \r
 import org.jscience.physics.amount.Amount;\r
 \r
@@ -11,38 +14,52 @@ import com.billkuker.rocketry.motorsim.Grain;
 \r
 public class CompoundGrain implements Grain {\r
        \r
-       private Grain a, b;\r
+       private Set<Grain> grains = new HashSet<Grain>();\r
        \r
-       public CompoundGrain(Grain a, Grain b){\r
-               this.a = a;\r
-               this.b = b;\r
+       public CompoundGrain(){\r
+\r
+       }\r
+       \r
+       public void add( Grain g ){\r
+               grains.add(g);\r
        }\r
 \r
        public Area getCrossSection(Amount<Length> regression) {\r
-               Area aa = a.getCrossSection(regression);\r
-               aa.add(b.getCrossSection(regression));\r
-               return aa;\r
+               Area a = new Area();\r
+               for ( Grain g : grains )\r
+                       a.add( g.getCrossSection(regression) );\r
+               return a;\r
        }\r
 \r
        public Area getSideView(Amount<Length> regression) {\r
-               Area aa = a.getSideView(regression);\r
-               aa.add(b.getSideView(regression));\r
-               return aa;\r
+               Area a = new Area();\r
+               for ( Grain g : grains )\r
+                       a.add( g.getSideView(regression) );\r
+               return a;\r
        }\r
 \r
        public Amount<javax.measure.quantity.Area> surfaceArea(\r
                        Amount<Length> regression) {\r
-               return a.surfaceArea(regression).plus(b.surfaceArea(regression));\r
+               Amount<javax.measure.quantity.Area> a = Amount.valueOf(0, SI.SQUARE_METRE);\r
+               for ( Grain g : grains )\r
+                       a = a.plus(g.surfaceArea(regression));\r
+               return a;\r
        }\r
 \r
        public Amount<Volume> volume(Amount<Length> regression) {\r
-               return a.volume(regression).plus(b.volume(regression));\r
+               Amount<Volume> v = Amount.valueOf(0, SI.CUBIC_METRE);\r
+               for ( Grain g : grains )\r
+                       v = v.plus(g.volume(regression));\r
+               return v;\r
        }\r
 \r
        public Amount<Length> webThickness() {\r
-               Amount<Length> l = a.webThickness();\r
-               if ( b.webThickness().isGreaterThan(l) )\r
-                       return b.webThickness();\r
+               Amount<Length> l = Amount.valueOf(0, SI.MILLIMETER);\r
+               for ( Grain g : grains ){\r
+                       Amount<Length> gl = g.webThickness();\r
+                       if ( gl.isGreaterThan(l) )\r
+                               l = gl;\r
+               }\r
                return l;\r
        }\r
 \r