\r
import java.awt.Shape;\r
import java.awt.geom.AffineTransform;\r
-import java.awt.geom.Ellipse2D;\r
import java.awt.geom.GeneralPath;\r
import java.awt.geom.Line2D;\r
\r
\r
import org.jscience.physics.amount.Amount;\r
\r
-public class ConvergentDivergentNozzle extends MotorPart implements Nozzle {\r
+public class ConvergentDivergentNozzle implements Nozzle, Validating {\r
\r
private Amount<Length> throatDiameter;\r
\r
private double efficiency = 1.0;\r
\r
\r
- @Override\r
public Amount<Area> throatArea() {\r
return throatDiameter.divide(2).pow(2).times(Math.PI).to(Area.UNIT);\r
}\r
\r
\r
public void setThroatDiameter(Amount<Length> throatDiameter) {\r
- if ( exitDiameter != null && throatDiameter.isGreaterThan(exitDiameter))\r
- throw new IllegalArgumentException("Throat > Exit");\r
- Amount<Length> old = this.throatDiameter;\r
this.throatDiameter = throatDiameter;\r
- firePropertyChange("throatDiameter", old, throatDiameter);\r
}\r
\r
\r
\r
\r
public void setExitDiameter(Amount<Length> exitDiameter) {\r
- if ( throatDiameter != null && exitDiameter.isLessThan(throatDiameter))\r
- throw new IllegalArgumentException("Throat > Exit");\r
- Amount<Length> old = this.exitDiameter;\r
this.exitDiameter = exitDiameter;\r
- firePropertyChange("exitDiameter", old, exitDiameter);\r
}\r
\r
- @Override\r
public Amount<Force> thrust(Amount<Pressure> Po, Amount<Pressure> Pe, Amount<Pressure> Patm, final double k ){\r
double cF = thrustCoefficient(Po, Pe, Patm, k);\r
return Po.times(throatArea()).times(cF).to(Force.UNIT);\r
}\r
\r
public void setEfficiency(double efficiency) {\r
- double old = this.efficiency;\r
this.efficiency = efficiency;\r
- firePropertyChange("efficiency", old, efficiency);\r
}\r
\r
public Shape nozzleShape(Amount<Length> chamberDiameter){\r
s.append(new Line2D.Double(0,0,cDiff,-cDiff), true);\r
\r
s.transform(AffineTransform.getScaleInstance(-1, 1));\r
- s.transform(AffineTransform.getTranslateInstance(-throatR, 0));\r
+ s.transform(AffineTransform.getTranslateInstance(-throatR * 2, 0));\r
\r
s.append(new Line2D.Double(0,0,diff,diff*3), false);\r
s.append(new Line2D.Double(0,0,cDiff,-cDiff), true);\r
\r
+ s.transform(AffineTransform.getTranslateInstance(throatR, cDiff));\r
//a.add(new java.awt.geom.Area( new Ellipse2D.Double(0,0,5,5)));\r
\r
return s;\r
}\r
+\r
+ @Override\r
+ public void validate() throws ValidationException {\r
+ if ( exitDiameter != null && throatDiameter.isGreaterThan(exitDiameter))\r
+ throw new IllegalArgumentException("Throat > Exit");\r
+ }\r
}\r