From: Bill Kuker Date: Fri, 10 Apr 2009 20:15:40 +0000 (+0000) Subject: Noa all grains can display themselves. X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=336a4bbb700573de0ef585d8585b2b978df13fbb;p=sw%2Fmotorsim Noa all grains can display themselves. Added MultiGrain --- diff --git a/src/com/billkuker/rocketry/motorsim/Burn.java b/src/com/billkuker/rocketry/motorsim/Burn.java index f02d8ac..b7c46b5 100644 --- a/src/com/billkuker/rocketry/motorsim/Burn.java +++ b/src/com/billkuker/rocketry/motorsim/Burn.java @@ -28,6 +28,7 @@ import com.billkuker.rocketry.motorsim.grain.BurnPanel; import com.billkuker.rocketry.motorsim.grain.CoredCylindricalGrain; import com.billkuker.rocketry.motorsim.grain.ExtrudedGrain; import com.billkuker.rocketry.motorsim.grain.GrainPanel; +import com.billkuker.rocketry.motorsim.grain.MultiGrain; import com.billkuker.rocketry.motorsim.visual.Chart; public class Burn { @@ -220,7 +221,7 @@ public class Burn { m.setFuel(new KNSU()); CylindricalChamber c = new CylindricalChamber(); - c.setLength(Amount.valueOf(100, SI.MILLIMETER)); + c.setLength(Amount.valueOf(200, SI.MILLIMETER)); c.setID(Amount.valueOf(30, SI.MILLIMETER)); m.setChamber(c); @@ -230,10 +231,12 @@ public class Burn { g.setID(Amount.valueOf(10, SI.MILLIMETER)); m.setGrain(g); + m.setGrain(new MultiGrain(g,2)); + //m.setGrain(new ExtrudedGrain()); ConvergentDivergentNozzle n = new ConvergentDivergentNozzle(); - n.setThroatDiameter(Amount.valueOf(6.600, SI.MILLIMETER)); + n.setThroatDiameter(Amount.valueOf(8.500, SI.MILLIMETER)); n.setExitDiameter(Amount.valueOf(20.87, SI.MILLIMETER)); n.setEfficiency(.87); m.setNozzle(n); diff --git a/src/com/billkuker/rocketry/motorsim/Grain.java b/src/com/billkuker/rocketry/motorsim/Grain.java index b5e9914..5fc2958 100644 --- a/src/com/billkuker/rocketry/motorsim/Grain.java +++ b/src/com/billkuker/rocketry/motorsim/Grain.java @@ -10,10 +10,9 @@ import org.jscience.physics.amount.Amount; public interface Grain { - public interface Graphical extends Grain{ - public java.awt.geom.Area getCrossSection(Amount regression); - public java.awt.geom.Area getSideView(Amount regression); - } + + public java.awt.geom.Area getCrossSection(Amount regression); + public java.awt.geom.Area getSideView(Amount regression); public interface DiscreteRegression{ public Amount optimalRegressionStep(); diff --git a/src/com/billkuker/rocketry/motorsim/grain/CoredCylindricalGrain.java b/src/com/billkuker/rocketry/motorsim/grain/CoredCylindricalGrain.java index 960cdaa..5bbad6d 100644 --- a/src/com/billkuker/rocketry/motorsim/grain/CoredCylindricalGrain.java +++ b/src/com/billkuker/rocketry/motorsim/grain/CoredCylindricalGrain.java @@ -19,7 +19,7 @@ import com.billkuker.rocketry.motorsim.Grain; import com.billkuker.rocketry.motorsim.validation.Validating; import com.billkuker.rocketry.motorsim.validation.ValidationException; -public class CoredCylindricalGrain implements Grain, Validating, Grain.Graphical { +public class CoredCylindricalGrain implements Grain, Validating { private Amount length, oD, iD; private boolean oInh = true, iInh = false, eInh = false; diff --git a/src/com/billkuker/rocketry/motorsim/grain/ExtrudedGrain.java b/src/com/billkuker/rocketry/motorsim/grain/ExtrudedGrain.java index a60c85d..56254e9 100644 --- a/src/com/billkuker/rocketry/motorsim/grain/ExtrudedGrain.java +++ b/src/com/billkuker/rocketry/motorsim/grain/ExtrudedGrain.java @@ -38,7 +38,7 @@ import org.jscience.physics.amount.Amount; import com.billkuker.rocketry.motorsim.Grain; import com.billkuker.rocketry.motorsim.visual.Chart; -public class ExtrudedGrain implements Grain, Grain.Graphical { +public class ExtrudedGrain implements Grain { Set plus = new HashSet(); diff --git a/src/com/billkuker/rocketry/motorsim/grain/GrainPanel.java b/src/com/billkuker/rocketry/motorsim/grain/GrainPanel.java index e684236..d30e51f 100644 --- a/src/com/billkuker/rocketry/motorsim/grain/GrainPanel.java +++ b/src/com/billkuker/rocketry/motorsim/grain/GrainPanel.java @@ -76,10 +76,9 @@ public class GrainPanel extends JPanel { JPanel left = new JPanel(new BorderLayout()); - if ( grain instanceof Grain.Graphical){ - add(xc = new XC((Grain.Graphical)grain), BorderLayout.CENTER); - left.add(xc); - } + add(xc = new XC(grain), BorderLayout.CENTER); + left.add(xc); + left.add(l, BorderLayout.NORTH); left.add( sl = new SL(), BorderLayout.SOUTH); @@ -102,8 +101,8 @@ public class GrainPanel extends JPanel { private class XC extends JPanel{ private static final long serialVersionUID = 1L; - Grain.Graphical grain; - public XC(Grain.Graphical g){ + Grain grain; + public XC(Grain g){ setMinimumSize(new Dimension(440,250)); grain = g; } diff --git a/src/com/billkuker/rocketry/motorsim/grain/MultiGrain.java b/src/com/billkuker/rocketry/motorsim/grain/MultiGrain.java new file mode 100644 index 0000000..152fa37 --- /dev/null +++ b/src/com/billkuker/rocketry/motorsim/grain/MultiGrain.java @@ -0,0 +1,51 @@ +package com.billkuker.rocketry.motorsim.grain; + +import java.awt.geom.AffineTransform; +import java.awt.geom.Rectangle2D; + +import javax.measure.quantity.Area; +import javax.measure.quantity.Length; +import javax.measure.quantity.Volume; + +import org.jscience.physics.amount.Amount; + +import com.billkuker.rocketry.motorsim.Grain; + +public class MultiGrain implements Grain { + + private Grain grain; + private int count; + + public MultiGrain( Grain g, int c ){ + grain = g; + count = c; + } + + public Amount surfaceArea(Amount regression) { + return grain.surfaceArea(regression).times(count); + } + + public Amount volume(Amount regression) { + return grain.volume(regression).times(count); + } + + public Amount webThickness() { + return grain.webThickness(); + } + + public java.awt.geom.Area getCrossSection(Amount regression) { + return grain.getCrossSection(regression); + } + + public java.awt.geom.Area getSideView(Amount regression) { + java.awt.geom.Area ret = new java.awt.geom.Area(); + java.awt.geom.Area g = grain.getSideView(regression); + Rectangle2D b = g.getBounds2D(); + for ( int i = 0 ; i < count ; i++ ){ + ret.add(g); + ret.transform(AffineTransform.getTranslateInstance(b.getWidth() + 10, 0)); + } + return ret; + } + +}