1 package com.billkuker.rocketry.motorsim;
\r
3 import java.awt.Shape;
\r
4 import java.awt.geom.Area;
\r
5 import java.awt.geom.Rectangle2D;
\r
6 import java.beans.PropertyChangeEvent;
\r
7 import java.beans.PropertyChangeListener;
\r
9 import javax.measure.quantity.Length;
\r
10 import javax.measure.quantity.Pressure;
\r
11 import javax.measure.quantity.Volume;
\r
12 import javax.measure.unit.SI;
\r
14 import org.jscience.physics.amount.Amount;
\r
16 public class CylindricalChamber implements Chamber {
\r
18 private Amount<Length> length = Amount.valueOf(200, SI.MILLIMETER);
\r
19 private Amount<Length> oD = Amount.valueOf(31, SI.MILLIMETER);
\r
20 private Amount<Length> iD = Amount.valueOf(30, SI.MILLIMETER);
\r
22 public Amount<Pressure> burstPressure() {
\r
26 public Amount<Volume> chamberVolume() {
\r
27 return iD.divide(2).pow(2).times(Math.PI).times(length).to(SI.CUBIC_METRE);
\r
30 public Amount<Length> getLength() {
\r
34 public void setLength(Amount<Length> length) {
\r
35 this.length = length;
\r
38 public Amount<Length> getID() {
\r
42 public void setID(Amount<Length> id) {
\r
46 public Amount<Length> getOD() {
\r
50 public void setOD(Amount<Length> oD) {
\r
55 public Shape chamberShape() {
\r
56 double ir = iD.doubleValue(SI.MILLIMETER) / 2;
\r
57 double or = oD.doubleValue(SI.MILLIMETER) / 2;
\r
58 double lenmm = length.doubleValue(SI.MILLIMETER);
\r
59 double thick = or-ir;
\r
61 Rectangle2D.Double l,r,t;
\r
62 l = new Rectangle2D.Double(-or,0,thick,lenmm);
\r
63 r = new Rectangle2D.Double(ir, 0, thick, lenmm);
\r
64 t = new Rectangle2D.Double(-or,0,or*2,thick);
\r
65 Area a = new Area(l);
\r