From: Bill Kuker Date: Sun, 12 Apr 2009 03:54:23 +0000 (+0000) Subject: Supports N grains, not 2 X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=8d0d9fda67fe93797bda3a92910ab0eac3e23e53;p=sw%2Fmotorsim Supports N grains, not 2 --- diff --git a/src/com/billkuker/rocketry/motorsim/grain/CompoundGrain.java b/src/com/billkuker/rocketry/motorsim/grain/CompoundGrain.java index 1610453..2eb5fb5 100644 --- a/src/com/billkuker/rocketry/motorsim/grain/CompoundGrain.java +++ b/src/com/billkuker/rocketry/motorsim/grain/CompoundGrain.java @@ -1,9 +1,12 @@ package com.billkuker.rocketry.motorsim.grain; import java.awt.geom.Area; +import java.util.HashSet; +import java.util.Set; import javax.measure.quantity.Length; import javax.measure.quantity.Volume; +import javax.measure.unit.SI; import org.jscience.physics.amount.Amount; @@ -11,38 +14,52 @@ import com.billkuker.rocketry.motorsim.Grain; public class CompoundGrain implements Grain { - private Grain a, b; + private Set grains = new HashSet(); - public CompoundGrain(Grain a, Grain b){ - this.a = a; - this.b = b; + public CompoundGrain(){ + + } + + public void add( Grain g ){ + grains.add(g); } public Area getCrossSection(Amount regression) { - Area aa = a.getCrossSection(regression); - aa.add(b.getCrossSection(regression)); - return aa; + Area a = new Area(); + for ( Grain g : grains ) + a.add( g.getCrossSection(regression) ); + return a; } public Area getSideView(Amount regression) { - Area aa = a.getSideView(regression); - aa.add(b.getSideView(regression)); - return aa; + Area a = new Area(); + for ( Grain g : grains ) + a.add( g.getSideView(regression) ); + return a; } public Amount surfaceArea( Amount regression) { - return a.surfaceArea(regression).plus(b.surfaceArea(regression)); + Amount a = Amount.valueOf(0, SI.SQUARE_METRE); + for ( Grain g : grains ) + a = a.plus(g.surfaceArea(regression)); + return a; } public Amount volume(Amount regression) { - return a.volume(regression).plus(b.volume(regression)); + Amount v = Amount.valueOf(0, SI.CUBIC_METRE); + for ( Grain g : grains ) + v = v.plus(g.volume(regression)); + return v; } public Amount webThickness() { - Amount l = a.webThickness(); - if ( b.webThickness().isGreaterThan(l) ) - return b.webThickness(); + Amount l = Amount.valueOf(0, SI.MILLIMETER); + for ( Grain g : grains ){ + Amount gl = g.webThickness(); + if ( gl.isGreaterThan(l) ) + l = gl; + } return l; }