]> git.gag.com Git - sw/motorsim/commitdiff
Noa all grains can display themselves.
authorBill Kuker <bkuker@billkuker.com>
Fri, 10 Apr 2009 20:15:40 +0000 (20:15 +0000)
committerBill Kuker <bkuker@billkuker.com>
Fri, 10 Apr 2009 20:15:40 +0000 (20:15 +0000)
Added MultiGrain

src/com/billkuker/rocketry/motorsim/Burn.java
src/com/billkuker/rocketry/motorsim/Grain.java
src/com/billkuker/rocketry/motorsim/grain/CoredCylindricalGrain.java
src/com/billkuker/rocketry/motorsim/grain/ExtrudedGrain.java
src/com/billkuker/rocketry/motorsim/grain/GrainPanel.java
src/com/billkuker/rocketry/motorsim/grain/MultiGrain.java [new file with mode: 0644]

index f02d8ac00a636683bb8c174b2340baa32079b735..b7c46b54572eacf8849e3a5287d3156ec477aa62 100644 (file)
@@ -28,6 +28,7 @@ import com.billkuker.rocketry.motorsim.grain.BurnPanel;
 import com.billkuker.rocketry.motorsim.grain.CoredCylindricalGrain;\r
 import com.billkuker.rocketry.motorsim.grain.ExtrudedGrain;\r
 import com.billkuker.rocketry.motorsim.grain.GrainPanel;\r
+import com.billkuker.rocketry.motorsim.grain.MultiGrain;\r
 import com.billkuker.rocketry.motorsim.visual.Chart;\r
 \r
 public class Burn {\r
@@ -220,7 +221,7 @@ public class Burn {
                m.setFuel(new KNSU());\r
                \r
                CylindricalChamber c = new CylindricalChamber();\r
-               c.setLength(Amount.valueOf(100, SI.MILLIMETER));\r
+               c.setLength(Amount.valueOf(200, SI.MILLIMETER));\r
                c.setID(Amount.valueOf(30, SI.MILLIMETER));\r
                m.setChamber(c);\r
                \r
@@ -230,10 +231,12 @@ public class Burn {
                g.setID(Amount.valueOf(10, SI.MILLIMETER));\r
                m.setGrain(g);\r
                \r
+               m.setGrain(new MultiGrain(g,2));\r
+               \r
                //m.setGrain(new ExtrudedGrain());\r
                \r
                ConvergentDivergentNozzle n = new ConvergentDivergentNozzle();\r
-               n.setThroatDiameter(Amount.valueOf(6.600, SI.MILLIMETER));\r
+               n.setThroatDiameter(Amount.valueOf(8.500, SI.MILLIMETER));\r
                n.setExitDiameter(Amount.valueOf(20.87, SI.MILLIMETER));\r
                n.setEfficiency(.87);\r
                m.setNozzle(n);\r
index b5e9914288448837dc92ece3579559984cc2a0cb..5fc2958f443b87624323626f8852da68458f2698 100644 (file)
@@ -10,10 +10,9 @@ import org.jscience.physics.amount.Amount;
 \r
 public interface Grain   {\r
        \r
-       public interface Graphical extends Grain{\r
-               public java.awt.geom.Area getCrossSection(Amount<Length> regression);\r
-               public java.awt.geom.Area getSideView(Amount<Length> regression);\r
-       }\r
+       \r
+       public java.awt.geom.Area getCrossSection(Amount<Length> regression);\r
+       public java.awt.geom.Area getSideView(Amount<Length> regression);\r
        \r
        public interface DiscreteRegression{\r
                public Amount<Length> optimalRegressionStep();\r
index 960cdaa9ba0ed62242b8cb5f9a7fb0eac3acfa44..5bbad6d801022c2029c9c17eedca251f1b8646af 100644 (file)
@@ -19,7 +19,7 @@ import com.billkuker.rocketry.motorsim.Grain;
 import com.billkuker.rocketry.motorsim.validation.Validating;\r
 import com.billkuker.rocketry.motorsim.validation.ValidationException;\r
 \r
-public class CoredCylindricalGrain implements Grain, Validating, Grain.Graphical {\r
+public class CoredCylindricalGrain implements Grain, Validating {\r
 \r
        private Amount<Length> length, oD, iD;\r
        private boolean oInh = true, iInh = false, eInh = false;\r
index a60c85dbf1daa21b83604adf2d9bbb1fabe62dc9..56254e92d6a6ed535eda5ab15c428e353749ac77 100644 (file)
@@ -38,7 +38,7 @@ import org.jscience.physics.amount.Amount;
 import com.billkuker.rocketry.motorsim.Grain;\r
 import com.billkuker.rocketry.motorsim.visual.Chart;\r
 \r
-public class ExtrudedGrain implements Grain, Grain.Graphical {\r
+public class ExtrudedGrain implements Grain {\r
 \r
        Set<Shape> plus = new HashSet<Shape>();\r
 \r
index e684236ee76455c2320531e09dc4325d05f3097d..d30e51fecb8a4413f50539335171c2d2dba12bb8 100644 (file)
@@ -76,10 +76,9 @@ public class GrainPanel extends JPanel {
                \r
                JPanel left = new JPanel(new BorderLayout());\r
                \r
-               if ( grain instanceof Grain.Graphical){\r
-                       add(xc = new XC((Grain.Graphical)grain), BorderLayout.CENTER);\r
-                       left.add(xc);\r
-               }\r
+               add(xc = new XC(grain), BorderLayout.CENTER);\r
+               left.add(xc);\r
+\r
                left.add(l, BorderLayout.NORTH);\r
                left.add( sl = new SL(), BorderLayout.SOUTH);\r
        \r
@@ -102,8 +101,8 @@ public class GrainPanel extends JPanel {
        \r
        private class XC extends JPanel{\r
                private static final long serialVersionUID = 1L;\r
-               Grain.Graphical grain;\r
-               public XC(Grain.Graphical g){\r
+               Grain grain;\r
+               public XC(Grain g){\r
                        setMinimumSize(new Dimension(440,250));\r
                        grain = g;\r
                }\r
diff --git a/src/com/billkuker/rocketry/motorsim/grain/MultiGrain.java b/src/com/billkuker/rocketry/motorsim/grain/MultiGrain.java
new file mode 100644 (file)
index 0000000..152fa37
--- /dev/null
@@ -0,0 +1,51 @@
+package com.billkuker.rocketry.motorsim.grain;\r
+\r
+import java.awt.geom.AffineTransform;\r
+import java.awt.geom.Rectangle2D;\r
+\r
+import javax.measure.quantity.Area;\r
+import javax.measure.quantity.Length;\r
+import javax.measure.quantity.Volume;\r
+\r
+import org.jscience.physics.amount.Amount;\r
+\r
+import com.billkuker.rocketry.motorsim.Grain;\r
+\r
+public class MultiGrain implements Grain {\r
+       \r
+       private Grain grain;\r
+       private int count;\r
+       \r
+       public MultiGrain( Grain g, int c ){\r
+               grain = g;\r
+               count = c;\r
+       }\r
+\r
+       public Amount<Area> surfaceArea(Amount<Length> regression) {\r
+               return grain.surfaceArea(regression).times(count);\r
+       }\r
+\r
+       public Amount<Volume> volume(Amount<Length> regression) {\r
+               return grain.volume(regression).times(count);\r
+       }\r
+\r
+       public Amount<Length> webThickness() {\r
+               return grain.webThickness();\r
+       }\r
+\r
+       public java.awt.geom.Area getCrossSection(Amount<Length> regression) {\r
+               return grain.getCrossSection(regression);\r
+       }\r
+\r
+       public java.awt.geom.Area getSideView(Amount<Length> regression) {\r
+               java.awt.geom.Area ret = new java.awt.geom.Area();\r
+               java.awt.geom.Area g = grain.getSideView(regression);\r
+               Rectangle2D b = g.getBounds2D();\r
+               for ( int i = 0 ; i < count ; i++ ){\r
+                       ret.add(g);\r
+                       ret.transform(AffineTransform.getTranslateInstance(b.getWidth() + 10, 0));\r
+               }\r
+               return ret;\r
+       }\r
+\r
+}\r