package net.sf.openrocket.rocketcomponent;
import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.startup.Application;
import net.sf.openrocket.util.Coordinate;
import net.sf.openrocket.util.MathUtil;
public class EllipticalFinSet extends FinSet {
private static final Translator trans = Application.getTranslator();
private static final int POINTS = 31;
// Static positioning for the fin points
private static final double[] POINT_X = new double[POINTS];
private static final double[] POINT_Y = new double[POINTS];
static {
for (int i = 0; i < POINTS; i++) {
double a = Math.PI * (POINTS - 1 - i) / (POINTS - 1);
POINT_X[i] = (Math.cos(a) + 1) / 2;
POINT_Y[i] = Math.sin(a);
}
POINT_X[0] = 0;
POINT_Y[0] = 0;
POINT_X[POINTS - 1] = 1;
POINT_Y[POINTS - 1] = 0;
}
private double height = 0.05;
public EllipticalFinSet() {
this.length = 0.05;
}
@Override
public Coordinate[] getFinPoints() {
double len = MathUtil.max(length, 0.0001);
Coordinate[] points = new Coordinate[POINTS];
for (int i = 0; i < POINTS; i++) {
points[i] = new Coordinate(POINT_X[i] * len, POINT_Y[i] * height);
}
return points;
}
@Override
public double getSpan() {
return height;
}
@Override
public String getComponentName() {
//// Elliptical fin set
return trans.get("EllipticalFinSet.Ellipticalfinset");
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
if (MathUtil.equals(this.height, height))
return;
this.height = height;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}
public void setLength(double length) {
if (MathUtil.equals(this.length, length))
return;
this.length = length;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}
}