X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fnet%2Fsf%2Fopenrocket%2Frocketcomponent%2FTrapezoidFinSet.java;h=a852b2fa054f9eb7e84aa8c0048f054390380650;hb=bf771f9d4b5215b0036435eb19fc8c813f87c79d;hp=288726b1fd38c344405f0d09fe4a274074d260b2;hpb=da7a9ff299f7b1529f8ff9cba08e4be3f369937c;p=debian%2Fopenrocket diff --git a/src/net/sf/openrocket/rocketcomponent/TrapezoidFinSet.java b/src/net/sf/openrocket/rocketcomponent/TrapezoidFinSet.java index 288726b1..a852b2fa 100644 --- a/src/net/sf/openrocket/rocketcomponent/TrapezoidFinSet.java +++ b/src/net/sf/openrocket/rocketcomponent/TrapezoidFinSet.java @@ -1,8 +1,12 @@ package net.sf.openrocket.rocketcomponent; +import java.util.ArrayList; +import java.util.List; + import net.sf.openrocket.l10n.Translator; import net.sf.openrocket.startup.Application; import net.sf.openrocket.util.Coordinate; +import net.sf.openrocket.util.MathUtil; /** * A set of trapezoidal fins. The root and tip chords are perpendicular to the rocket @@ -13,9 +17,9 @@ import net.sf.openrocket.util.Coordinate; public class TrapezoidFinSet extends FinSet { private static final Translator trans = Application.getTranslator(); - - public static final double MAX_SWEEP_ANGLE=(89*Math.PI/180.0); - + + public static final double MAX_SWEEP_ANGLE = (89 * Math.PI / 180.0); + /* * sweep tipChord * | |___________ @@ -32,64 +36,67 @@ public class TrapezoidFinSet extends FinSet { private double tipChord = 0; private double height = 0; private double sweep = 0; - - + + public TrapezoidFinSet() { - this (3, 0.05, 0.05, 0.025, 0.05); + this(3, 0.05, 0.05, 0.025, 0.05); } - + // TODO: HIGH: height=0 -> CP = NaN public TrapezoidFinSet(int fins, double rootChord, double tipChord, double sweep, double height) { super(); - + this.setFinCount(fins); this.length = rootChord; this.tipChord = tipChord; this.sweep = sweep; this.height = height; } - - + + public void setFinShape(double rootChord, double tipChord, double sweep, double height, double thickness) { - if (this.length==rootChord && this.tipChord==tipChord && this.sweep==sweep && - this.height==height && this.thickness==thickness) + if (this.length == rootChord && this.tipChord == tipChord && this.sweep == sweep && + this.height == height && this.thickness == thickness) return; - this.length=rootChord; - this.tipChord=tipChord; - this.sweep=sweep; - this.height=height; - this.thickness=thickness; + this.length = rootChord; + this.tipChord = tipChord; + this.sweep = sweep; + this.height = height; + this.thickness = thickness; fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE); } - + public double getRootChord() { return length; } + public void setRootChord(double r) { if (length == r) return; - length = Math.max(r,0); + length = Math.max(r, 0); fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE); } - + public double getTipChord() { return tipChord; } + public void setTipChord(double r) { if (tipChord == r) return; - tipChord = Math.max(r,0); + tipChord = Math.max(r, 0); fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE); } - + /** * Get the sweep length. */ public double getSweep() { return sweep; } + /** * Set the sweep length. */ @@ -99,7 +106,7 @@ public class TrapezoidFinSet extends FinSet { sweep = r; fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE); } - + /** * Get the sweep angle. This is calculated from the true sweep and height, and is not * stored separetely. @@ -107,13 +114,14 @@ public class TrapezoidFinSet extends FinSet { public double getSweepAngle() { if (height == 0) { if (sweep > 0) - return Math.PI/2; + return Math.PI / 2; if (sweep < 0) - return -Math.PI/2; + return -Math.PI / 2; return 0; } - return Math.atan(sweep/height); + return Math.atan(sweep / height); } + /** * Sets the sweep by the sweep angle. The sweep is calculated and set by this method, * and the angle itself is not stored. @@ -128,34 +136,37 @@ public class TrapezoidFinSet extends FinSet { return; setSweep(sweep); } - + public double getHeight() { return height; } + public void setHeight(double r) { if (height == r) return; - height = Math.max(r,0); + height = Math.max(r, 0); fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE); } - - + + /** * Returns the geometry of a trapezoidal fin. */ @Override public Coordinate[] getFinPoints() { - Coordinate[] c = new Coordinate[4]; - - c[0] = Coordinate.NUL; - c[1] = new Coordinate(sweep,height); - c[2] = new Coordinate(sweep+tipChord,height); - c[3] = new Coordinate(length,0); - - return c; + List list = new ArrayList(4); + + list.add(Coordinate.NUL); + list.add(new Coordinate(sweep, height)); + if (tipChord > 0.0001) { + list.add(new Coordinate(sweep + tipChord, height)); + } + list.add(new Coordinate(MathUtil.max(length, 0.0001), 0)); + + return list.toArray(new Coordinate[list.size()]); } - + /** * Returns the span of a trapezoidal fin. */ @@ -163,12 +174,12 @@ public class TrapezoidFinSet extends FinSet { public double getSpan() { return height; } - - + + @Override public String getComponentName() { //// Trapezoidal fin set return trans.get("TrapezoidFinSet.TrapezoidFinSet"); } - + }