X-Git-Url: https://git.gag.com/?a=blobdiff_plain;ds=sidebyside;f=src%2Fnet%2Fsf%2Fopenrocket%2Frocketcomponent%2FTrapezoidFinSet.java;h=fc118881dc042fa97cd1ee635c5021c6d3c37a6c;hb=b552a84c8b96e2fcdc87fdf190ba2f7f38ada4f4;hp=9c3076a3301474d5c7509b00a00e641997356ff3;hpb=ccac17ad89dc4c8be8515eeb6d0451a49cb12810;p=debian%2Fopenrocket diff --git a/src/net/sf/openrocket/rocketcomponent/TrapezoidFinSet.java b/src/net/sf/openrocket/rocketcomponent/TrapezoidFinSet.java index 9c3076a3..fc118881 100644 --- a/src/net/sf/openrocket/rocketcomponent/TrapezoidFinSet.java +++ b/src/net/sf/openrocket/rocketcomponent/TrapezoidFinSet.java @@ -1,6 +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 @@ -10,8 +16,10 @@ import net.sf.openrocket.util.Coordinate; */ public class TrapezoidFinSet extends FinSet { - public static final double MAX_SWEEP_ANGLE=(89*Math.PI/180.0); - + private static final Translator trans = Application.getTranslator(); + + public static final double MAX_SWEEP_ANGLE = (89 * Math.PI / 180.0); + /* * sweep tipChord * | |___________ @@ -23,69 +31,72 @@ public class TrapezoidFinSet extends FinSet { * length * == rootChord */ - + // rootChord == length 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.03); } - + // 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. */ @@ -95,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. @@ -103,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. @@ -124,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. */ @@ -159,11 +174,12 @@ public class TrapezoidFinSet extends FinSet { public double getSpan() { return height; } - - + + @Override public String getComponentName() { - return "Trapezoidal fin set"; + //// Trapezoidal fin set + return trans.get("TrapezoidFinSet.TrapezoidFinSet"); } - + }