From 681ff9d5f13ca9262c847db4e22ec2b67d36ffcb Mon Sep 17 00:00:00 2001 From: Bill Kuker Date: Tue, 13 Sep 2011 14:37:28 +0000 Subject: [PATCH] Initial Multiport --- .../rocketry/motorsim/grain/MultiPort.java | 161 ++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 src/com/billkuker/rocketry/motorsim/grain/MultiPort.java diff --git a/src/com/billkuker/rocketry/motorsim/grain/MultiPort.java b/src/com/billkuker/rocketry/motorsim/grain/MultiPort.java new file mode 100644 index 0000000..98fe11f --- /dev/null +++ b/src/com/billkuker/rocketry/motorsim/grain/MultiPort.java @@ -0,0 +1,161 @@ +package com.billkuker.rocketry.motorsim.grain; + +import java.awt.Shape; +import java.awt.geom.AffineTransform; +import java.awt.geom.Ellipse2D; +import java.beans.PropertyVetoException; + +import javax.measure.quantity.Angle; +import javax.measure.quantity.Length; +import javax.measure.unit.NonSI; +import javax.measure.unit.SI; + +import org.jscience.physics.amount.Amount; + +import com.billkuker.rocketry.motorsim.Grain; +import com.billkuker.rocketry.motorsim.Validating; +import com.billkuker.rocketry.motorsim.grain.util.BurningShape; +import com.billkuker.rocketry.motorsim.grain.util.ExtrudedShapeGrain; +import com.billkuker.rocketry.motorsim.visual.Editor; +import com.billkuker.rocketry.motorsim.visual.GrainPanel; + +public class MultiPort extends ExtrudedShapeGrain implements Validating { + + private Amount oD = Amount.valueOf(30, SI.MILLIMETER); + + + private Amount coreD = Amount.valueOf(3, SI.MILLIMETER); + + private Amount r1D = Amount.valueOf(2, SI.MILLIMETER); + private Amount r1Offset = Amount.valueOf(5, SI.MILLIMETER); + private int r1Count = 4; + + private Amount r2D = Amount.valueOf(1, SI.MILLIMETER); + private Amount r2Offset = Amount.valueOf(10, SI.MILLIMETER); + private int r2Count = 8; + + private Amount ringTwoRot = Amount.valueOf(22.5, NonSI.DEGREE_ANGLE); + + @Override + public void validate() throws ValidationException { + // TODO Auto-generated method stub + + } + + public MultiPort(){ + try { + setLength(Amount.valueOf(70, SI.MILLIMETER)); + } catch (PropertyVetoException e) { + e.printStackTrace(); + } + generateGeometry(); + } + + private void generateGeometry(){ + double odmm = oD.doubleValue(SI.MILLIMETER); + double cdmm = coreD.doubleValue(SI.MILLIMETER); + double r1dmm = r1D.doubleValue(SI.MILLIMETER); + double r1off = r1Offset.doubleValue(SI.MILLIMETER); + + double r2dmm = r2D.doubleValue(SI.MILLIMETER); + double r2off = r2Offset.doubleValue(SI.MILLIMETER); + + double r2rot = ringTwoRot.doubleValue(SI.RADIAN); + + xsection = new BurningShape(); + Shape outside = new Ellipse2D.Double(-odmm/2, -odmm/2, odmm, odmm); + xsection.add(outside); + xsection.inhibit(outside); + xsection.subtract(new Ellipse2D.Double(-cdmm/2, -cdmm/2, cdmm, cdmm)); + webThickness = null; + + for ( int i = 0; i < r1Count; i++ ){ + Shape port = new Ellipse2D.Double(r1off-r1dmm/2,-r1dmm/2,r1dmm,r1dmm); + xsection.subtract(port, AffineTransform.getRotateInstance(i*(2.0*Math.PI/r1Count))); + } + + for ( int i = 0; i < r2Count; i++ ){ + Shape port = new Ellipse2D.Double(r2off-r2dmm/2,-r2dmm/2,r2dmm,r2dmm); + xsection.subtract(port, AffineTransform.getRotateInstance(r2rot + i*(2.0*Math.PI/r2Count))); + } + } + + + public static void main(String args[]){ + Grain g; + new GrainPanel(g = new MultiPort()).showAsWindow(); + new Editor(g).showAsWindow(); + } + + public Amount getoD() { + return oD; + } + + public void setoD(Amount oD) { + this.oD = oD; + } + + public Amount getCoreD() { + return coreD; + } + + public void setCoreD(Amount coreD) { + this.coreD = coreD; + } + + public Amount getR1D() { + return r1D; + } + + public void setR1D(Amount r1d) { + r1D = r1d; + } + + public Amount getR1Offset() { + return r1Offset; + } + + public void setR1Offset(Amount r1Offset) { + this.r1Offset = r1Offset; + } + + public int getR1Count() { + return r1Count; + } + + public void setR1Count(int r1Count) { + this.r1Count = r1Count; + } + + public Amount getR2D() { + return r2D; + } + + public void setR2D(Amount r2d) { + r2D = r2d; + } + + public Amount getR2Offset() { + return r2Offset; + } + + public void setR2Offset(Amount r2Offset) { + this.r2Offset = r2Offset; + } + + public int getR2Count() { + return r2Count; + } + + public void setR2Count(int r2Count) { + this.r2Count = r2Count; + } + + public Amount getRingTwoRot() { + return ringTwoRot; + } + + public void setRingTwoRot(Amount ringTwoRot) { + this.ringTwoRot = ringTwoRot; + } +} -- 2.47.2