(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 \r
7 import javax.measure.quantity.Length;\r
8 import javax.measure.quantity.Pressure;\r
9 import javax.measure.quantity.Volume;\r
10 import javax.measure.unit.SI;\r
11 \r
12 import org.jscience.physics.amount.Amount;\r
13 \r
14 public class CylindricalChamber implements Chamber {\r
15         \r
16         private Amount<Length> length = Amount.valueOf(200, SI.MILLIMETER);\r
17         private Amount<Length> oD = Amount.valueOf(31, SI.MILLIMETER);\r
18         private Amount<Length> iD = Amount.valueOf(30, SI.MILLIMETER);\r
19 \r
20         public Amount<Pressure> burstPressure() {\r
21                 return null;\r
22         }\r
23 \r
24         public Amount<Volume> chamberVolume() {\r
25                 return iD.divide(2).pow(2).times(Math.PI).times(length).to(SI.CUBIC_METRE);\r
26         }\r
27 \r
28         public Amount<Length> getLength() {\r
29                 return length;\r
30         }\r
31 \r
32         public void setLength(Amount<Length> length) {\r
33                 this.length = length;\r
34         }\r
35 \r
36         public Amount<Length> getID() {\r
37                 return iD;\r
38         }\r
39 \r
40         public void setID(Amount<Length> id) {\r
41                 iD = id;\r
42         }\r
43         \r
44         public Amount<Length> getOD() {\r
45                 return oD;\r
46         }\r
47 \r
48         public void setOD(Amount<Length> oD) {\r
49                 this.oD = oD;\r
50         }\r
51 \r
52         @Override\r
53         public Shape chamberShape() {\r
54                 double ir = iD.doubleValue(SI.MILLIMETER) / 2;\r
55                 double or = oD.doubleValue(SI.MILLIMETER) / 2;\r
56                 double lenmm = length.doubleValue(SI.MILLIMETER);\r
57                 double thick = or-ir;\r
58 \r
59                 Rectangle2D.Double l,r,t;\r
60                 l = new Rectangle2D.Double(-or,0,thick,lenmm);\r
61                 r = new Rectangle2D.Double(ir, 0, thick, lenmm);\r
62                 t = new Rectangle2D.Double(-or,0,or*2,thick);\r
63                 Area a = new Area(l);\r
64                 a.add(new Area(r));\r
65                 a.add(new Area(t));\r
66                 return a;\r
67         }\r
68 \r
69 }\r