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
\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