language selector, bug fixed
[debian/openrocket] / src / net / sf / openrocket / rocketcomponent / TrapezoidFinSet.java
index 288726b1fd38c344405f0d09fe4a274074d260b2..a852b2fa054f9eb7e84aa8c0048f054390380650 100644 (file)
@@ -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<Coordinate> list = new ArrayList<Coordinate>(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");
        }
-
+       
 }