(no commit message)
[sw/motorsim] / src / com / billkuker / rocketry / motorsim / CylindricalChamber.java
1 package com.billkuker.rocketry.motorsim;\r
2 \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
8 \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
13 \r
14 import org.jscience.physics.amount.Amount;\r
15 \r
16 public class CylindricalChamber implements Chamber {\r
17         \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
21 \r
22         public Amount<Pressure> burstPressure() {\r
23                 return null;\r
24         }\r
25 \r
26         public Amount<Volume> chamberVolume() {\r
27                 return iD.divide(2).pow(2).times(Math.PI).times(length).to(SI.CUBIC_METRE);\r
28         }\r
29 \r
30         public Amount<Length> getLength() {\r
31                 return length;\r
32         }\r
33 \r
34         public void setLength(Amount<Length> length) {\r
35                 this.length = length;\r
36         }\r
37 \r
38         public Amount<Length> getID() {\r
39                 return iD;\r
40         }\r
41 \r
42         public void setID(Amount<Length> id) {\r
43                 iD = id;\r
44         }\r
45         \r
46         public Amount<Length> getOD() {\r
47                 return oD;\r
48         }\r
49 \r
50         public void setOD(Amount<Length> oD) {\r
51                 this.oD = oD;\r
52         }\r
53 \r
54         @Override\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
60 \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
66                 a.add(new Area(r));\r
67                 a.add(new Area(t));\r
68                 return a;\r
69         }\r
70 \r
71 }\r