|
|
|
@ -16,8 +16,11 @@ import java.util.Map;
|
|
|
|
import java.util.regex.Matcher;
|
|
|
|
import java.util.regex.Matcher;
|
|
|
|
import java.util.regex.Pattern;
|
|
|
|
import java.util.regex.Pattern;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import net.sf.openrocket.l10n.Translator;
|
|
|
|
import net.sf.openrocket.rocketcomponent.FlightConfiguration;
|
|
|
|
import net.sf.openrocket.rocketcomponent.FlightConfiguration;
|
|
|
|
import net.sf.openrocket.rocketcomponent.Rocket;
|
|
|
|
import net.sf.openrocket.rocketcomponent.Rocket;
|
|
|
|
|
|
|
|
import net.sf.openrocket.startup.Application;
|
|
|
|
|
|
|
|
import net.sf.openrocket.util.Chars;
|
|
|
|
import net.sf.openrocket.util.StringUtils;
|
|
|
|
import net.sf.openrocket.util.StringUtils;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -29,15 +32,15 @@ import net.sf.openrocket.util.StringUtils;
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
public class UnitGroup {
|
|
|
|
public class UnitGroup {
|
|
|
|
|
|
|
|
|
|
|
|
public static final UnitGroup UNITS_NONE;
|
|
|
|
public static final UnitGroup UNITS_NONE;
|
|
|
|
|
|
|
|
|
|
|
|
public static final UnitGroup UNITS_MOTOR_DIMENSIONS;
|
|
|
|
public static final UnitGroup UNITS_MOTOR_DIMENSIONS;
|
|
|
|
public static final UnitGroup UNITS_LENGTH;
|
|
|
|
public static final UnitGroup UNITS_LENGTH;
|
|
|
|
public static final UnitGroup UNITS_ALL_LENGTHS;
|
|
|
|
public static final UnitGroup UNITS_ALL_LENGTHS;
|
|
|
|
public static final UnitGroup UNITS_DISTANCE;
|
|
|
|
public static final UnitGroup UNITS_DISTANCE;
|
|
|
|
public static final UnitGroup UNITS_SHAPE_PARAMETER;
|
|
|
|
public static final UnitGroup UNITS_SHAPE_PARAMETER;
|
|
|
|
|
|
|
|
|
|
|
|
public static final UnitGroup UNITS_AREA;
|
|
|
|
public static final UnitGroup UNITS_AREA;
|
|
|
|
public static final UnitGroup UNITS_STABILITY;
|
|
|
|
public static final UnitGroup UNITS_STABILITY;
|
|
|
|
public static final UnitGroup UNITS_SECONDARY_STABILITY;
|
|
|
|
public static final UnitGroup UNITS_SECONDARY_STABILITY;
|
|
|
|
@ -49,6 +52,8 @@ public class UnitGroup {
|
|
|
|
public static final UnitGroup UNITS_STABILITY_CALIBERS;
|
|
|
|
public static final UnitGroup UNITS_STABILITY_CALIBERS;
|
|
|
|
public static final UnitGroup UNITS_VELOCITY;
|
|
|
|
public static final UnitGroup UNITS_VELOCITY;
|
|
|
|
public static final UnitGroup UNITS_WINDSPEED;
|
|
|
|
public static final UnitGroup UNITS_WINDSPEED;
|
|
|
|
|
|
|
|
public static final UnitGroup UNITS_LATITUDE;
|
|
|
|
|
|
|
|
public static final UnitGroup UNITS_LONGITUDE;
|
|
|
|
public static final UnitGroup UNITS_ACCELERATION;
|
|
|
|
public static final UnitGroup UNITS_ACCELERATION;
|
|
|
|
public static final UnitGroup UNITS_MASS;
|
|
|
|
public static final UnitGroup UNITS_MASS;
|
|
|
|
public static final UnitGroup UNITS_INERTIA;
|
|
|
|
public static final UnitGroup UNITS_INERTIA;
|
|
|
|
@ -58,13 +63,13 @@ public class UnitGroup {
|
|
|
|
public static final UnitGroup UNITS_DENSITY_LINE;
|
|
|
|
public static final UnitGroup UNITS_DENSITY_LINE;
|
|
|
|
public static final UnitGroup UNITS_FORCE;
|
|
|
|
public static final UnitGroup UNITS_FORCE;
|
|
|
|
public static final UnitGroup UNITS_IMPULSE;
|
|
|
|
public static final UnitGroup UNITS_IMPULSE;
|
|
|
|
|
|
|
|
|
|
|
|
/** Time in the order of less than a second (time step etc). */
|
|
|
|
/** Time in the order of less than a second (time step etc). */
|
|
|
|
public static final UnitGroup UNITS_TIME_STEP;
|
|
|
|
public static final UnitGroup UNITS_TIME_STEP;
|
|
|
|
|
|
|
|
|
|
|
|
/** Time in the order of seconds (motor delay etc). */
|
|
|
|
/** Time in the order of seconds (motor delay etc). */
|
|
|
|
public static final UnitGroup UNITS_SHORT_TIME;
|
|
|
|
public static final UnitGroup UNITS_SHORT_TIME;
|
|
|
|
|
|
|
|
|
|
|
|
/** Time in the order of the flight time of a rocket. */
|
|
|
|
/** Time in the order of the flight time of a rocket. */
|
|
|
|
public static final UnitGroup UNITS_FLIGHT_TIME;
|
|
|
|
public static final UnitGroup UNITS_FLIGHT_TIME;
|
|
|
|
public static final UnitGroup UNITS_ROLL;
|
|
|
|
public static final UnitGroup UNITS_ROLL;
|
|
|
|
@ -72,10 +77,10 @@ public class UnitGroup {
|
|
|
|
public static final UnitGroup UNITS_PRESSURE;
|
|
|
|
public static final UnitGroup UNITS_PRESSURE;
|
|
|
|
public static final UnitGroup UNITS_RELATIVE;
|
|
|
|
public static final UnitGroup UNITS_RELATIVE;
|
|
|
|
public static final UnitGroup UNITS_ROUGHNESS;
|
|
|
|
public static final UnitGroup UNITS_ROUGHNESS;
|
|
|
|
|
|
|
|
|
|
|
|
public static final UnitGroup UNITS_COEFFICIENT;
|
|
|
|
public static final UnitGroup UNITS_COEFFICIENT;
|
|
|
|
public static final UnitGroup UNITS_FREQUENCY;
|
|
|
|
public static final UnitGroup UNITS_FREQUENCY;
|
|
|
|
|
|
|
|
|
|
|
|
public static final UnitGroup UNITS_ENERGY;
|
|
|
|
public static final UnitGroup UNITS_ENERGY;
|
|
|
|
public static final UnitGroup UNITS_POWER;
|
|
|
|
public static final UnitGroup UNITS_POWER;
|
|
|
|
public static final UnitGroup UNITS_MOMENTUM;
|
|
|
|
public static final UnitGroup UNITS_MOMENTUM;
|
|
|
|
@ -83,12 +88,14 @@ public class UnitGroup {
|
|
|
|
public static final UnitGroup UNITS_CURRENT;
|
|
|
|
public static final UnitGroup UNITS_CURRENT;
|
|
|
|
|
|
|
|
|
|
|
|
public static final UnitGroup UNITS_SCALING;
|
|
|
|
public static final UnitGroup UNITS_SCALING;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static final Map<String, UnitGroup> UNITS; // keys such as "LENGTH", "VELOCITY"
|
|
|
|
public static final Map<String, UnitGroup> UNITS; // keys such as "LENGTH", "VELOCITY"
|
|
|
|
public static final Map<String, UnitGroup> SIUNITS; // keys such a "m", "m/s"
|
|
|
|
public static final Map<String, UnitGroup> SIUNITS; // keys such a "m", "m/s"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static final Translator trans = Application.getTranslator();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
/*
|
|
|
|
* Note: Units may not use HTML tags.
|
|
|
|
* Note: Units may not use HTML tags.
|
|
|
|
*
|
|
|
|
*
|
|
|
|
@ -98,32 +105,32 @@ public class UnitGroup {
|
|
|
|
static {
|
|
|
|
static {
|
|
|
|
UNITS_NONE = new UnitGroup();
|
|
|
|
UNITS_NONE = new UnitGroup();
|
|
|
|
UNITS_NONE.addUnit(Unit.NOUNIT);
|
|
|
|
UNITS_NONE.addUnit(Unit.NOUNIT);
|
|
|
|
|
|
|
|
|
|
|
|
UNITS_ENERGY = new UnitGroup();
|
|
|
|
UNITS_ENERGY = new UnitGroup();
|
|
|
|
UNITS_ENERGY.addUnit(new GeneralUnit(1, "J"));
|
|
|
|
UNITS_ENERGY.addUnit(new GeneralUnit(1, "J"));
|
|
|
|
UNITS_ENERGY.addUnit(new GeneralUnit(1e-7, "erg"));
|
|
|
|
UNITS_ENERGY.addUnit(new GeneralUnit(1e-7, "erg"));
|
|
|
|
UNITS_ENERGY.addUnit(new GeneralUnit(1.055, "BTU"));
|
|
|
|
UNITS_ENERGY.addUnit(new GeneralUnit(1.055, "BTU"));
|
|
|
|
UNITS_ENERGY.addUnit(new GeneralUnit(4.184, "cal"));
|
|
|
|
UNITS_ENERGY.addUnit(new GeneralUnit(4.184, "cal"));
|
|
|
|
UNITS_ENERGY.addUnit(new GeneralUnit(1.3558179483314, "ft" + DOT + "lbf"));
|
|
|
|
UNITS_ENERGY.addUnit(new GeneralUnit(1.3558179483314, "ft" + DOT + "lbf"));
|
|
|
|
|
|
|
|
|
|
|
|
UNITS_POWER = new UnitGroup();
|
|
|
|
UNITS_POWER = new UnitGroup();
|
|
|
|
UNITS_POWER.addUnit(new GeneralUnit(1e-3, "mW"));
|
|
|
|
UNITS_POWER.addUnit(new GeneralUnit(1e-3, "mW"));
|
|
|
|
UNITS_POWER.addUnit(new GeneralUnit(1, "W"));
|
|
|
|
UNITS_POWER.addUnit(new GeneralUnit(1, "W"));
|
|
|
|
UNITS_POWER.addUnit(new GeneralUnit(1e3, "kW"));
|
|
|
|
UNITS_POWER.addUnit(new GeneralUnit(1e3, "kW"));
|
|
|
|
UNITS_POWER.addUnit(new GeneralUnit(1e-7, "ergs"));
|
|
|
|
UNITS_POWER.addUnit(new GeneralUnit(1e-7, "ergs"));
|
|
|
|
UNITS_POWER.addUnit(new GeneralUnit(745.699872, "hp"));
|
|
|
|
UNITS_POWER.addUnit(new GeneralUnit(745.699872, "hp"));
|
|
|
|
|
|
|
|
|
|
|
|
UNITS_MOMENTUM = new UnitGroup();
|
|
|
|
UNITS_MOMENTUM = new UnitGroup();
|
|
|
|
UNITS_MOMENTUM.addUnit(new GeneralUnit(1, "kg" + DOT + "m/s"));
|
|
|
|
UNITS_MOMENTUM.addUnit(new GeneralUnit(1, "kg" + DOT + "m/s"));
|
|
|
|
|
|
|
|
|
|
|
|
UNITS_VOLTAGE = new UnitGroup();
|
|
|
|
UNITS_VOLTAGE = new UnitGroup();
|
|
|
|
UNITS_VOLTAGE.addUnit(new GeneralUnit(1e-3, "mV"));
|
|
|
|
UNITS_VOLTAGE.addUnit(new GeneralUnit(1e-3, "mV"));
|
|
|
|
UNITS_VOLTAGE.addUnit(new GeneralUnit(1, "V"));
|
|
|
|
UNITS_VOLTAGE.addUnit(new GeneralUnit(1, "V"));
|
|
|
|
|
|
|
|
|
|
|
|
UNITS_CURRENT = new UnitGroup();
|
|
|
|
UNITS_CURRENT = new UnitGroup();
|
|
|
|
UNITS_CURRENT.addUnit(new GeneralUnit(1e-3, "mA"));
|
|
|
|
UNITS_CURRENT.addUnit(new GeneralUnit(1e-3, "mA"));
|
|
|
|
UNITS_CURRENT.addUnit(new GeneralUnit(1, "A"));
|
|
|
|
UNITS_CURRENT.addUnit(new GeneralUnit(1, "A"));
|
|
|
|
|
|
|
|
|
|
|
|
UNITS_LENGTH = new UnitGroup();
|
|
|
|
UNITS_LENGTH = new UnitGroup();
|
|
|
|
UNITS_LENGTH.addUnit(new GeneralUnit(0.001, "mm"));
|
|
|
|
UNITS_LENGTH.addUnit(new GeneralUnit(0.001, "mm"));
|
|
|
|
UNITS_LENGTH.addUnit(new GeneralUnit(0.01, "cm"));
|
|
|
|
UNITS_LENGTH.addUnit(new GeneralUnit(0.01, "cm"));
|
|
|
|
@ -131,13 +138,13 @@ public class UnitGroup {
|
|
|
|
UNITS_LENGTH.addUnit(new InchUnit(0.0254, "in", 1));
|
|
|
|
UNITS_LENGTH.addUnit(new InchUnit(0.0254, "in", 1));
|
|
|
|
UNITS_LENGTH.addUnit(new FractionalUnit(0.0254, "in/64", "in", 64, 1d / 16d, 0.5d / 64d));
|
|
|
|
UNITS_LENGTH.addUnit(new FractionalUnit(0.0254, "in/64", "in", 64, 1d / 16d, 0.5d / 64d));
|
|
|
|
UNITS_LENGTH.addUnit(new GeneralUnit(0.3048, "ft"));
|
|
|
|
UNITS_LENGTH.addUnit(new GeneralUnit(0.3048, "ft"));
|
|
|
|
|
|
|
|
|
|
|
|
UNITS_MOTOR_DIMENSIONS = new UnitGroup();
|
|
|
|
UNITS_MOTOR_DIMENSIONS = new UnitGroup();
|
|
|
|
UNITS_MOTOR_DIMENSIONS.addUnit(new GeneralUnit(0.001, "mm"));
|
|
|
|
UNITS_MOTOR_DIMENSIONS.addUnit(new GeneralUnit(0.001, "mm"));
|
|
|
|
UNITS_MOTOR_DIMENSIONS.addUnit(new GeneralUnit(0.01, "cm"));
|
|
|
|
UNITS_MOTOR_DIMENSIONS.addUnit(new GeneralUnit(0.01, "cm"));
|
|
|
|
UNITS_MOTOR_DIMENSIONS.addUnit(new GeneralUnit(1, "m"));
|
|
|
|
UNITS_MOTOR_DIMENSIONS.addUnit(new GeneralUnit(1, "m"));
|
|
|
|
UNITS_MOTOR_DIMENSIONS.addUnit(new GeneralUnit(0.0254, "in"));
|
|
|
|
UNITS_MOTOR_DIMENSIONS.addUnit(new GeneralUnit(0.0254, "in"));
|
|
|
|
|
|
|
|
|
|
|
|
UNITS_DISTANCE = new UnitGroup();
|
|
|
|
UNITS_DISTANCE = new UnitGroup();
|
|
|
|
UNITS_DISTANCE.addUnit(new GeneralUnit(1, "m"));
|
|
|
|
UNITS_DISTANCE.addUnit(new GeneralUnit(1, "m"));
|
|
|
|
UNITS_DISTANCE.addUnit(new GeneralUnit(1000, "km"));
|
|
|
|
UNITS_DISTANCE.addUnit(new GeneralUnit(1000, "km"));
|
|
|
|
@ -145,7 +152,7 @@ public class UnitGroup {
|
|
|
|
UNITS_DISTANCE.addUnit(new GeneralUnit(0.9144, "yd"));
|
|
|
|
UNITS_DISTANCE.addUnit(new GeneralUnit(0.9144, "yd"));
|
|
|
|
UNITS_DISTANCE.addUnit(new GeneralUnit(1609.344, "mi"));
|
|
|
|
UNITS_DISTANCE.addUnit(new GeneralUnit(1609.344, "mi"));
|
|
|
|
UNITS_DISTANCE.addUnit(new GeneralUnit(1852, "nmi"));
|
|
|
|
UNITS_DISTANCE.addUnit(new GeneralUnit(1852, "nmi"));
|
|
|
|
|
|
|
|
|
|
|
|
UNITS_ALL_LENGTHS = new UnitGroup();
|
|
|
|
UNITS_ALL_LENGTHS = new UnitGroup();
|
|
|
|
UNITS_ALL_LENGTHS.addUnit(new GeneralUnit(0.001, "mm"));
|
|
|
|
UNITS_ALL_LENGTHS.addUnit(new GeneralUnit(0.001, "mm"));
|
|
|
|
UNITS_ALL_LENGTHS.addUnit(new GeneralUnit(0.01, "cm"));
|
|
|
|
UNITS_ALL_LENGTHS.addUnit(new GeneralUnit(0.01, "cm"));
|
|
|
|
@ -157,7 +164,7 @@ public class UnitGroup {
|
|
|
|
UNITS_ALL_LENGTHS.addUnit(new GeneralUnit(0.9144, "yd"));
|
|
|
|
UNITS_ALL_LENGTHS.addUnit(new GeneralUnit(0.9144, "yd"));
|
|
|
|
UNITS_ALL_LENGTHS.addUnit(new GeneralUnit(1609.344, "mi"));
|
|
|
|
UNITS_ALL_LENGTHS.addUnit(new GeneralUnit(1609.344, "mi"));
|
|
|
|
UNITS_ALL_LENGTHS.addUnit(new GeneralUnit(1852, "nmi"));
|
|
|
|
UNITS_ALL_LENGTHS.addUnit(new GeneralUnit(1852, "nmi"));
|
|
|
|
|
|
|
|
|
|
|
|
UNITS_AREA = new UnitGroup();
|
|
|
|
UNITS_AREA = new UnitGroup();
|
|
|
|
UNITS_AREA.addUnit(new GeneralUnit(pow2(0.001), "mm" + SQUARED));
|
|
|
|
UNITS_AREA.addUnit(new GeneralUnit(pow2(0.001), "mm" + SQUARED));
|
|
|
|
UNITS_AREA.addUnit(new GeneralUnit(pow2(0.01), "cm" + SQUARED));
|
|
|
|
UNITS_AREA.addUnit(new GeneralUnit(pow2(0.01), "cm" + SQUARED));
|
|
|
|
@ -167,7 +174,7 @@ public class UnitGroup {
|
|
|
|
|
|
|
|
|
|
|
|
UNITS_SHAPE_PARAMETER = new UnitGroup();
|
|
|
|
UNITS_SHAPE_PARAMETER = new UnitGroup();
|
|
|
|
UNITS_SHAPE_PARAMETER.addUnit(new GeneralUnit(1, "" + ZWSP, 1, 10, 0.1));
|
|
|
|
UNITS_SHAPE_PARAMETER.addUnit(new GeneralUnit(1, "" + ZWSP, 1, 10, 0.1));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
UNITS_STABILITY = new UnitGroup();
|
|
|
|
UNITS_STABILITY = new UnitGroup();
|
|
|
|
UNITS_SECONDARY_STABILITY = new UnitGroup();
|
|
|
|
UNITS_SECONDARY_STABILITY = new UnitGroup();
|
|
|
|
@ -184,25 +191,33 @@ public class UnitGroup {
|
|
|
|
UNITS_VELOCITY.addUnit(new GeneralUnit(0.3048, "ft/s"));
|
|
|
|
UNITS_VELOCITY.addUnit(new GeneralUnit(0.3048, "ft/s"));
|
|
|
|
UNITS_VELOCITY.addUnit(new GeneralUnit(0.44704, "mph"));
|
|
|
|
UNITS_VELOCITY.addUnit(new GeneralUnit(0.44704, "mph"));
|
|
|
|
UNITS_VELOCITY.addUnit(new GeneralUnit(0.51444445, "kt"));
|
|
|
|
UNITS_VELOCITY.addUnit(new GeneralUnit(0.51444445, "kt"));
|
|
|
|
|
|
|
|
|
|
|
|
UNITS_WINDSPEED = new UnitGroup();
|
|
|
|
UNITS_WINDSPEED = new UnitGroup();
|
|
|
|
UNITS_WINDSPEED.addUnit(new GeneralUnit(1, "m/s"));
|
|
|
|
UNITS_WINDSPEED.addUnit(new GeneralUnit(1, "m/s"));
|
|
|
|
UNITS_WINDSPEED.addUnit(new GeneralUnit(1 / 3.6, "km/h"));
|
|
|
|
UNITS_WINDSPEED.addUnit(new GeneralUnit(1 / 3.6, "km/h"));
|
|
|
|
UNITS_WINDSPEED.addUnit(new GeneralUnit(0.3048, "ft/s"));
|
|
|
|
UNITS_WINDSPEED.addUnit(new GeneralUnit(0.3048, "ft/s"));
|
|
|
|
UNITS_WINDSPEED.addUnit(new GeneralUnit(0.44704, "mph"));
|
|
|
|
UNITS_WINDSPEED.addUnit(new GeneralUnit(0.44704, "mph"));
|
|
|
|
UNITS_WINDSPEED.addUnit(new GeneralUnit(0.51444445, "kt"));
|
|
|
|
UNITS_WINDSPEED.addUnit(new GeneralUnit(0.51444445, "kt"));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
UNITS_LATITUDE = new UnitGroup();
|
|
|
|
|
|
|
|
UNITS_LATITUDE.addUnit(new GeneralUnit(1, DEGREE + " " + trans.get("CompassRose.lbl.north")));
|
|
|
|
|
|
|
|
UNITS_LATITUDE.addUnit(new GeneralUnit(-1, DEGREE + " " + trans.get("CompassRose.lbl.south")));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
UNITS_LONGITUDE = new UnitGroup();
|
|
|
|
|
|
|
|
UNITS_LONGITUDE.addUnit(new GeneralUnit(1, DEGREE + " " + trans.get("CompassRose.lbl.east")));
|
|
|
|
|
|
|
|
UNITS_LONGITUDE.addUnit(new GeneralUnit(-1, DEGREE + " " + trans.get("CompassRose.lbl.west")));
|
|
|
|
|
|
|
|
|
|
|
|
UNITS_ACCELERATION = new UnitGroup();
|
|
|
|
UNITS_ACCELERATION = new UnitGroup();
|
|
|
|
UNITS_ACCELERATION.addUnit(new GeneralUnit(1, "m/s" + SQUARED));
|
|
|
|
UNITS_ACCELERATION.addUnit(new GeneralUnit(1, "m/s" + SQUARED));
|
|
|
|
UNITS_ACCELERATION.addUnit(new GeneralUnit(0.3048, "ft/s" + SQUARED));
|
|
|
|
UNITS_ACCELERATION.addUnit(new GeneralUnit(0.3048, "ft/s" + SQUARED));
|
|
|
|
UNITS_ACCELERATION.addUnit(new GeneralUnit(9.80665, "G"));
|
|
|
|
UNITS_ACCELERATION.addUnit(new GeneralUnit(9.80665, "G"));
|
|
|
|
|
|
|
|
|
|
|
|
UNITS_MASS = new UnitGroup();
|
|
|
|
UNITS_MASS = new UnitGroup();
|
|
|
|
UNITS_MASS.addUnit(new GeneralUnit(0.001, "g"));
|
|
|
|
UNITS_MASS.addUnit(new GeneralUnit(0.001, "g"));
|
|
|
|
UNITS_MASS.addUnit(new GeneralUnit(1, "kg"));
|
|
|
|
UNITS_MASS.addUnit(new GeneralUnit(1, "kg"));
|
|
|
|
UNITS_MASS.addUnit(new GeneralUnit(0.0283495231, "oz"));
|
|
|
|
UNITS_MASS.addUnit(new GeneralUnit(0.0283495231, "oz"));
|
|
|
|
UNITS_MASS.addUnit(new GeneralUnit(0.45359237, "lb"));
|
|
|
|
UNITS_MASS.addUnit(new GeneralUnit(0.45359237, "lb"));
|
|
|
|
|
|
|
|
|
|
|
|
UNITS_INERTIA = new UnitGroup();
|
|
|
|
UNITS_INERTIA = new UnitGroup();
|
|
|
|
UNITS_INERTIA.addUnit(new GeneralUnit(0.0001, "kg" + DOT + "cm" + SQUARED));
|
|
|
|
UNITS_INERTIA.addUnit(new GeneralUnit(0.0001, "kg" + DOT + "cm" + SQUARED));
|
|
|
|
UNITS_INERTIA.addUnit(new GeneralUnit(1, "kg" + DOT + "m" + SQUARED));
|
|
|
|
UNITS_INERTIA.addUnit(new GeneralUnit(1, "kg" + DOT + "m" + SQUARED));
|
|
|
|
@ -210,12 +225,12 @@ public class UnitGroup {
|
|
|
|
UNITS_INERTIA.addUnit(new GeneralUnit(0.000292639653, "lb" + DOT + "in" + SQUARED));
|
|
|
|
UNITS_INERTIA.addUnit(new GeneralUnit(0.000292639653, "lb" + DOT + "in" + SQUARED));
|
|
|
|
UNITS_INERTIA.addUnit(new GeneralUnit(0.0421401101, "lb" + DOT + "ft" + SQUARED));
|
|
|
|
UNITS_INERTIA.addUnit(new GeneralUnit(0.0421401101, "lb" + DOT + "ft" + SQUARED));
|
|
|
|
UNITS_INERTIA.addUnit(new GeneralUnit(1.35581795, "lbf" + DOT + "ft" + DOT + "s" + SQUARED));
|
|
|
|
UNITS_INERTIA.addUnit(new GeneralUnit(1.35581795, "lbf" + DOT + "ft" + DOT + "s" + SQUARED));
|
|
|
|
|
|
|
|
|
|
|
|
UNITS_ANGLE = new UnitGroup();
|
|
|
|
UNITS_ANGLE = new UnitGroup();
|
|
|
|
UNITS_ANGLE.addUnit(new DegreeUnit());
|
|
|
|
UNITS_ANGLE.addUnit(new DegreeUnit());
|
|
|
|
UNITS_ANGLE.addUnit(new FixedPrecisionUnit("rad", 0.01));
|
|
|
|
UNITS_ANGLE.addUnit(new FixedPrecisionUnit("rad", 0.01));
|
|
|
|
UNITS_ANGLE.addUnit(new GeneralUnit(1.0 / 3437.74677078, "arcmin"));
|
|
|
|
UNITS_ANGLE.addUnit(new GeneralUnit(1.0 / 3437.74677078, "arcmin"));
|
|
|
|
|
|
|
|
|
|
|
|
UNITS_DENSITY_BULK = new UnitGroup();
|
|
|
|
UNITS_DENSITY_BULK = new UnitGroup();
|
|
|
|
UNITS_DENSITY_BULK.addUnit(new GeneralUnit(1000, "g/cm" + CUBED));
|
|
|
|
UNITS_DENSITY_BULK.addUnit(new GeneralUnit(1000, "g/cm" + CUBED));
|
|
|
|
UNITS_DENSITY_BULK.addUnit(new GeneralUnit(1000999, "kg/cm" + CUBED));
|
|
|
|
UNITS_DENSITY_BULK.addUnit(new GeneralUnit(1000999, "kg/cm" + CUBED));
|
|
|
|
@ -223,7 +238,7 @@ public class UnitGroup {
|
|
|
|
UNITS_DENSITY_BULK.addUnit(new GeneralUnit(1, "kg/m" + CUBED));
|
|
|
|
UNITS_DENSITY_BULK.addUnit(new GeneralUnit(1, "kg/m" + CUBED));
|
|
|
|
UNITS_DENSITY_BULK.addUnit(new GeneralUnit(1729.99404, "oz/in" + CUBED));
|
|
|
|
UNITS_DENSITY_BULK.addUnit(new GeneralUnit(1729.99404, "oz/in" + CUBED));
|
|
|
|
UNITS_DENSITY_BULK.addUnit(new GeneralUnit(16.0184634, "lb/ft" + CUBED));
|
|
|
|
UNITS_DENSITY_BULK.addUnit(new GeneralUnit(16.0184634, "lb/ft" + CUBED));
|
|
|
|
|
|
|
|
|
|
|
|
UNITS_DENSITY_SURFACE = new UnitGroup();
|
|
|
|
UNITS_DENSITY_SURFACE = new UnitGroup();
|
|
|
|
UNITS_DENSITY_SURFACE.addUnit(new GeneralUnit(10, "g/cm" + SQUARED));
|
|
|
|
UNITS_DENSITY_SURFACE.addUnit(new GeneralUnit(10, "g/cm" + SQUARED));
|
|
|
|
UNITS_DENSITY_SURFACE.addUnit(new GeneralUnit(0.001, "g/m" + SQUARED));
|
|
|
|
UNITS_DENSITY_SURFACE.addUnit(new GeneralUnit(0.001, "g/m" + SQUARED));
|
|
|
|
@ -233,7 +248,7 @@ public class UnitGroup {
|
|
|
|
UNITS_DENSITY_SURFACE.addUnit(new GeneralUnit(43.9418487, "oz/in" + SQUARED));
|
|
|
|
UNITS_DENSITY_SURFACE.addUnit(new GeneralUnit(43.9418487, "oz/in" + SQUARED));
|
|
|
|
UNITS_DENSITY_SURFACE.addUnit(new GeneralUnit(0.305151727, "oz/ft" + SQUARED));
|
|
|
|
UNITS_DENSITY_SURFACE.addUnit(new GeneralUnit(0.305151727, "oz/ft" + SQUARED));
|
|
|
|
UNITS_DENSITY_SURFACE.addUnit(new GeneralUnit(4.88242764, "lb/ft" + SQUARED));
|
|
|
|
UNITS_DENSITY_SURFACE.addUnit(new GeneralUnit(4.88242764, "lb/ft" + SQUARED));
|
|
|
|
|
|
|
|
|
|
|
|
UNITS_DENSITY_LINE = new UnitGroup();
|
|
|
|
UNITS_DENSITY_LINE = new UnitGroup();
|
|
|
|
UNITS_DENSITY_LINE.addUnit(new GeneralUnit(0.1, "g/cm"));
|
|
|
|
UNITS_DENSITY_LINE.addUnit(new GeneralUnit(0.1, "g/cm"));
|
|
|
|
UNITS_DENSITY_LINE.addUnit(new GeneralUnit(0.001, "g/m"));
|
|
|
|
UNITS_DENSITY_LINE.addUnit(new GeneralUnit(0.001, "g/m"));
|
|
|
|
@ -241,38 +256,38 @@ public class UnitGroup {
|
|
|
|
UNITS_DENSITY_LINE.addUnit(new GeneralUnit(10, "kg/dm"));
|
|
|
|
UNITS_DENSITY_LINE.addUnit(new GeneralUnit(10, "kg/dm"));
|
|
|
|
UNITS_DENSITY_LINE.addUnit(new GeneralUnit(1, "kg/m"));
|
|
|
|
UNITS_DENSITY_LINE.addUnit(new GeneralUnit(1, "kg/m"));
|
|
|
|
UNITS_DENSITY_LINE.addUnit(new GeneralUnit(0.0930102465, "oz/ft"));
|
|
|
|
UNITS_DENSITY_LINE.addUnit(new GeneralUnit(0.0930102465, "oz/ft"));
|
|
|
|
|
|
|
|
|
|
|
|
UNITS_FORCE = new UnitGroup();
|
|
|
|
UNITS_FORCE = new UnitGroup();
|
|
|
|
UNITS_FORCE.addUnit(new GeneralUnit(1, "N"));
|
|
|
|
UNITS_FORCE.addUnit(new GeneralUnit(1, "N"));
|
|
|
|
UNITS_FORCE.addUnit(new GeneralUnit(4.44822162, "lbf"));
|
|
|
|
UNITS_FORCE.addUnit(new GeneralUnit(4.44822162, "lbf"));
|
|
|
|
UNITS_FORCE.addUnit(new GeneralUnit(9.80665, "kgf"));
|
|
|
|
UNITS_FORCE.addUnit(new GeneralUnit(9.80665, "kgf"));
|
|
|
|
|
|
|
|
|
|
|
|
UNITS_IMPULSE = new UnitGroup();
|
|
|
|
UNITS_IMPULSE = new UnitGroup();
|
|
|
|
UNITS_IMPULSE.addUnit(new GeneralUnit(1, "Ns"));
|
|
|
|
UNITS_IMPULSE.addUnit(new GeneralUnit(1, "Ns"));
|
|
|
|
UNITS_IMPULSE.addUnit(new GeneralUnit(4.44822162, "lbf" + DOT + "s"));
|
|
|
|
UNITS_IMPULSE.addUnit(new GeneralUnit(4.44822162, "lbf" + DOT + "s"));
|
|
|
|
|
|
|
|
|
|
|
|
UNITS_TIME_STEP = new UnitGroup();
|
|
|
|
UNITS_TIME_STEP = new UnitGroup();
|
|
|
|
UNITS_TIME_STEP.addUnit(new FixedPrecisionUnit("ms", 1, 0.001));
|
|
|
|
UNITS_TIME_STEP.addUnit(new FixedPrecisionUnit("ms", 1, 0.001));
|
|
|
|
UNITS_TIME_STEP.addUnit(new FixedPrecisionUnit("s", 0.01));
|
|
|
|
UNITS_TIME_STEP.addUnit(new FixedPrecisionUnit("s", 0.01));
|
|
|
|
|
|
|
|
|
|
|
|
UNITS_SHORT_TIME = new UnitGroup();
|
|
|
|
UNITS_SHORT_TIME = new UnitGroup();
|
|
|
|
UNITS_SHORT_TIME.addUnit(new GeneralUnit(1, "s"));
|
|
|
|
UNITS_SHORT_TIME.addUnit(new GeneralUnit(1, "s"));
|
|
|
|
|
|
|
|
|
|
|
|
UNITS_FLIGHT_TIME = new UnitGroup();
|
|
|
|
UNITS_FLIGHT_TIME = new UnitGroup();
|
|
|
|
UNITS_FLIGHT_TIME.addUnit(new GeneralUnit(1, "s"));
|
|
|
|
UNITS_FLIGHT_TIME.addUnit(new GeneralUnit(1, "s"));
|
|
|
|
UNITS_FLIGHT_TIME.addUnit(new GeneralUnit(60, "min"));
|
|
|
|
UNITS_FLIGHT_TIME.addUnit(new GeneralUnit(60, "min"));
|
|
|
|
|
|
|
|
|
|
|
|
UNITS_ROLL = new UnitGroup();
|
|
|
|
UNITS_ROLL = new UnitGroup();
|
|
|
|
UNITS_ROLL.addUnit(new GeneralUnit(1, "rad/s"));
|
|
|
|
UNITS_ROLL.addUnit(new GeneralUnit(1, "rad/s"));
|
|
|
|
UNITS_ROLL.addUnit(new GeneralUnit(Math.PI / 180, DEGREE + "/s"));
|
|
|
|
UNITS_ROLL.addUnit(new GeneralUnit(Math.PI / 180, DEGREE + "/s"));
|
|
|
|
UNITS_ROLL.addUnit(new GeneralUnit(2 * Math.PI, "r/s"));
|
|
|
|
UNITS_ROLL.addUnit(new GeneralUnit(2 * Math.PI, "r/s"));
|
|
|
|
UNITS_ROLL.addUnit(new GeneralUnit(2 * Math.PI / 60, "rpm"));
|
|
|
|
UNITS_ROLL.addUnit(new GeneralUnit(2 * Math.PI / 60, "rpm"));
|
|
|
|
|
|
|
|
|
|
|
|
UNITS_TEMPERATURE = new UnitGroup();
|
|
|
|
UNITS_TEMPERATURE = new UnitGroup();
|
|
|
|
UNITS_TEMPERATURE.addUnit(new FixedPrecisionUnit("K", 0.01));
|
|
|
|
UNITS_TEMPERATURE.addUnit(new FixedPrecisionUnit("K", 0.01));
|
|
|
|
UNITS_TEMPERATURE.addUnit(new TemperatureUnit(1, 273.15, 0.01, DEGREE + "C"));
|
|
|
|
UNITS_TEMPERATURE.addUnit(new TemperatureUnit(1, 273.15, 0.01, DEGREE + "C"));
|
|
|
|
UNITS_TEMPERATURE.addUnit(new TemperatureUnit(5.0 / 9.0, 459.67, 0.01, DEGREE + "F"));
|
|
|
|
UNITS_TEMPERATURE.addUnit(new TemperatureUnit(5.0 / 9.0, 459.67, 0.01, DEGREE + "F"));
|
|
|
|
|
|
|
|
|
|
|
|
UNITS_PRESSURE = new UnitGroup();
|
|
|
|
UNITS_PRESSURE = new UnitGroup();
|
|
|
|
UNITS_PRESSURE.addUnit(new FixedPrecisionUnit("mbar", 0.01, 1.0e2));
|
|
|
|
UNITS_PRESSURE.addUnit(new FixedPrecisionUnit("mbar", 0.01, 1.0e2));
|
|
|
|
UNITS_PRESSURE.addUnit(new FixedPrecisionUnit("bar", 0.001, 1.0e5));
|
|
|
|
UNITS_PRESSURE.addUnit(new FixedPrecisionUnit("bar", 0.001, 1.0e5));
|
|
|
|
@ -281,26 +296,26 @@ public class UnitGroup {
|
|
|
|
UNITS_PRESSURE.addUnit(new FixedPrecisionUnit("inHg", 0.01, 3386.389));
|
|
|
|
UNITS_PRESSURE.addUnit(new FixedPrecisionUnit("inHg", 0.01, 3386.389));
|
|
|
|
UNITS_PRESSURE.addUnit(new FixedPrecisionUnit("psi", 0.01, 6894.75729));
|
|
|
|
UNITS_PRESSURE.addUnit(new FixedPrecisionUnit("psi", 0.01, 6894.75729));
|
|
|
|
UNITS_PRESSURE.addUnit(new GeneralUnit(1, "Pa"));
|
|
|
|
UNITS_PRESSURE.addUnit(new GeneralUnit(1, "Pa"));
|
|
|
|
|
|
|
|
|
|
|
|
UNITS_RELATIVE = new UnitGroup();
|
|
|
|
UNITS_RELATIVE = new UnitGroup();
|
|
|
|
UNITS_RELATIVE.addUnit(new FixedPrecisionUnit("" + ZWSP, 0.01, 1.0));
|
|
|
|
UNITS_RELATIVE.addUnit(new FixedPrecisionUnit("" + ZWSP, 0.01, 1.0));
|
|
|
|
UNITS_RELATIVE.addUnit(new GeneralUnit(0.01, "%"));
|
|
|
|
UNITS_RELATIVE.addUnit(new GeneralUnit(0.01, "%"));
|
|
|
|
UNITS_RELATIVE.addUnit(new FixedPrecisionUnit("" + PERMILLE, 1, 0.001));
|
|
|
|
UNITS_RELATIVE.addUnit(new FixedPrecisionUnit("" + PERMILLE, 1, 0.001));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
UNITS_ROUGHNESS = new UnitGroup();
|
|
|
|
UNITS_ROUGHNESS = new UnitGroup();
|
|
|
|
UNITS_ROUGHNESS.addUnit(new GeneralUnit(0.000001, MICRO + "m"));
|
|
|
|
UNITS_ROUGHNESS.addUnit(new GeneralUnit(0.000001, MICRO + "m"));
|
|
|
|
UNITS_ROUGHNESS.addUnit(new GeneralUnit(0.0000254, "mil"));
|
|
|
|
UNITS_ROUGHNESS.addUnit(new GeneralUnit(0.0000254, "mil"));
|
|
|
|
UNITS_ROUGHNESS.addUnit(new GeneralUnit(0.0254, "in"));
|
|
|
|
UNITS_ROUGHNESS.addUnit(new GeneralUnit(0.0254, "in"));
|
|
|
|
UNITS_ROUGHNESS.addUnit(new GeneralUnit(1, "m"));
|
|
|
|
UNITS_ROUGHNESS.addUnit(new GeneralUnit(1, "m"));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
UNITS_COEFFICIENT = new UnitGroup();
|
|
|
|
UNITS_COEFFICIENT = new UnitGroup();
|
|
|
|
UNITS_COEFFICIENT.addUnit(new FixedPrecisionUnit("" + ZWSP, 0.001)); // zero-width space
|
|
|
|
UNITS_COEFFICIENT.addUnit(new FixedPrecisionUnit("" + ZWSP, 0.001)); // zero-width space
|
|
|
|
|
|
|
|
|
|
|
|
UNITS_SCALING = new UnitGroup();
|
|
|
|
UNITS_SCALING = new UnitGroup();
|
|
|
|
UNITS_SCALING.addUnit(new FixedPrecisionUnit("" + ZWSP, 0.1)); // zero-width space
|
|
|
|
UNITS_SCALING.addUnit(new FixedPrecisionUnit("" + ZWSP, 0.1)); // zero-width space
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// This is not used by OpenRocket, and not extensively tested:
|
|
|
|
// This is not used by OpenRocket, and not extensively tested:
|
|
|
|
UNITS_FREQUENCY = new UnitGroup();
|
|
|
|
UNITS_FREQUENCY = new UnitGroup();
|
|
|
|
@ -309,7 +324,7 @@ public class UnitGroup {
|
|
|
|
UNITS_FREQUENCY.addUnit(new FrequencyUnit(1000, "kHz"));
|
|
|
|
UNITS_FREQUENCY.addUnit(new FrequencyUnit(1000, "kHz"));
|
|
|
|
|
|
|
|
|
|
|
|
resetDefaultUnits();
|
|
|
|
resetDefaultUnits();
|
|
|
|
|
|
|
|
|
|
|
|
HashMap<String, UnitGroup> map = new HashMap<String, UnitGroup>();
|
|
|
|
HashMap<String, UnitGroup> map = new HashMap<String, UnitGroup>();
|
|
|
|
map.put("NONE", UNITS_NONE);
|
|
|
|
map.put("NONE", UNITS_NONE);
|
|
|
|
map.put("LENGTH", UNITS_LENGTH);
|
|
|
|
map.put("LENGTH", UNITS_LENGTH);
|
|
|
|
@ -346,9 +361,11 @@ public class UnitGroup {
|
|
|
|
map.put("MOMENTUM", UNITS_MOMENTUM);
|
|
|
|
map.put("MOMENTUM", UNITS_MOMENTUM);
|
|
|
|
map.put("FREQUENCY", UNITS_FREQUENCY);
|
|
|
|
map.put("FREQUENCY", UNITS_FREQUENCY);
|
|
|
|
map.put("WINDSPEED", UNITS_WINDSPEED);
|
|
|
|
map.put("WINDSPEED", UNITS_WINDSPEED);
|
|
|
|
|
|
|
|
map.put("LATITUDE", UNITS_LATITUDE);
|
|
|
|
|
|
|
|
map.put("LONGITUDE", UNITS_LONGITUDE);
|
|
|
|
|
|
|
|
|
|
|
|
UNITS = Collections.unmodifiableMap(map);
|
|
|
|
UNITS = Collections.unmodifiableMap(map);
|
|
|
|
|
|
|
|
|
|
|
|
HashMap<String, UnitGroup> simap = new HashMap<String, UnitGroup>();
|
|
|
|
HashMap<String, UnitGroup> simap = new HashMap<String, UnitGroup>();
|
|
|
|
simap.put("m", UNITS_ALL_LENGTHS);
|
|
|
|
simap.put("m", UNITS_ALL_LENGTHS);
|
|
|
|
simap.put("m^2", UNITS_AREA);
|
|
|
|
simap.put("m^2", UNITS_AREA);
|
|
|
|
@ -368,10 +385,10 @@ public class UnitGroup {
|
|
|
|
simap.put("kg m/s", UNITS_MOMENTUM);
|
|
|
|
simap.put("kg m/s", UNITS_MOMENTUM);
|
|
|
|
simap.put("Hz", UNITS_FREQUENCY);
|
|
|
|
simap.put("Hz", UNITS_FREQUENCY);
|
|
|
|
simap.put("K", UNITS_TEMPERATURE);
|
|
|
|
simap.put("K", UNITS_TEMPERATURE);
|
|
|
|
|
|
|
|
|
|
|
|
SIUNITS = Collections.unmodifiableMap(simap);
|
|
|
|
SIUNITS = Collections.unmodifiableMap(simap);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static void setDefaultMetricUnits() {
|
|
|
|
public static void setDefaultMetricUnits() {
|
|
|
|
UNITS_LENGTH.setDefaultUnit("cm");
|
|
|
|
UNITS_LENGTH.setDefaultUnit("cm");
|
|
|
|
UNITS_MOTOR_DIMENSIONS.setDefaultUnit("mm");
|
|
|
|
UNITS_MOTOR_DIMENSIONS.setDefaultUnit("mm");
|
|
|
|
@ -394,11 +411,13 @@ public class UnitGroup {
|
|
|
|
UNITS_ROLL.setDefaultUnit("r/s");
|
|
|
|
UNITS_ROLL.setDefaultUnit("r/s");
|
|
|
|
UNITS_TEMPERATURE.setDefaultUnit(DEGREE + "C");
|
|
|
|
UNITS_TEMPERATURE.setDefaultUnit(DEGREE + "C");
|
|
|
|
UNITS_WINDSPEED.setDefaultUnit("m/s");
|
|
|
|
UNITS_WINDSPEED.setDefaultUnit("m/s");
|
|
|
|
|
|
|
|
UNITS_LATITUDE.setDefaultUnit(DEGREE + " " + trans.get("CompassRose.lbl.north"));
|
|
|
|
|
|
|
|
UNITS_LONGITUDE.setDefaultUnit(DEGREE + " " + trans.get("CompassRose.lbl.east"));
|
|
|
|
UNITS_PRESSURE.setDefaultUnit("mbar");
|
|
|
|
UNITS_PRESSURE.setDefaultUnit("mbar");
|
|
|
|
UNITS_RELATIVE.setDefaultUnit("%");
|
|
|
|
UNITS_RELATIVE.setDefaultUnit("%");
|
|
|
|
UNITS_ROUGHNESS.setDefaultUnit(MICRO + "m");
|
|
|
|
UNITS_ROUGHNESS.setDefaultUnit(MICRO + "m");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static void setDefaultImperialUnits() {
|
|
|
|
public static void setDefaultImperialUnits() {
|
|
|
|
UNITS_LENGTH.setDefaultUnit("in");
|
|
|
|
UNITS_LENGTH.setDefaultUnit("in");
|
|
|
|
UNITS_MOTOR_DIMENSIONS.setDefaultUnit("in");
|
|
|
|
UNITS_MOTOR_DIMENSIONS.setDefaultUnit("in");
|
|
|
|
@ -421,6 +440,8 @@ public class UnitGroup {
|
|
|
|
UNITS_ROLL.setDefaultUnit("r/s");
|
|
|
|
UNITS_ROLL.setDefaultUnit("r/s");
|
|
|
|
UNITS_TEMPERATURE.setDefaultUnit(DEGREE + "F");
|
|
|
|
UNITS_TEMPERATURE.setDefaultUnit(DEGREE + "F");
|
|
|
|
UNITS_WINDSPEED.setDefaultUnit("mph");
|
|
|
|
UNITS_WINDSPEED.setDefaultUnit("mph");
|
|
|
|
|
|
|
|
UNITS_LATITUDE.setDefaultUnit(DEGREE + " " + trans.get("CompassRose.lbl.north"));
|
|
|
|
|
|
|
|
UNITS_LONGITUDE.setDefaultUnit(DEGREE + " " + trans.get("CompassRose.lbl.east"));
|
|
|
|
UNITS_PRESSURE.setDefaultUnit("mbar");
|
|
|
|
UNITS_PRESSURE.setDefaultUnit("mbar");
|
|
|
|
UNITS_RELATIVE.setDefaultUnit("%");
|
|
|
|
UNITS_RELATIVE.setDefaultUnit("%");
|
|
|
|
UNITS_ROUGHNESS.setDefaultUnit("mil");
|
|
|
|
UNITS_ROUGHNESS.setDefaultUnit("mil");
|
|
|
|
@ -443,6 +464,8 @@ public class UnitGroup {
|
|
|
|
UNITS_STABILITY_CALIBERS.setDefaultUnit(0);
|
|
|
|
UNITS_STABILITY_CALIBERS.setDefaultUnit(0);
|
|
|
|
UNITS_VELOCITY.setDefaultUnit(0);
|
|
|
|
UNITS_VELOCITY.setDefaultUnit(0);
|
|
|
|
UNITS_WINDSPEED.setDefaultUnit(0);
|
|
|
|
UNITS_WINDSPEED.setDefaultUnit(0);
|
|
|
|
|
|
|
|
UNITS_LATITUDE.setDefaultUnit(0);
|
|
|
|
|
|
|
|
UNITS_LONGITUDE.setDefaultUnit(0);
|
|
|
|
UNITS_ACCELERATION.setDefaultUnit(0);
|
|
|
|
UNITS_ACCELERATION.setDefaultUnit(0);
|
|
|
|
UNITS_MASS.setDefaultUnit(0);
|
|
|
|
UNITS_MASS.setDefaultUnit(0);
|
|
|
|
UNITS_INERTIA.setDefaultUnit(1);
|
|
|
|
UNITS_INERTIA.setDefaultUnit(1);
|
|
|
|
@ -473,13 +496,13 @@ public class UnitGroup {
|
|
|
|
stabilityUnit.addUnit(new CaliberUnit((Rocket) null));
|
|
|
|
stabilityUnit.addUnit(new CaliberUnit((Rocket) null));
|
|
|
|
stabilityUnit.addUnit(new PercentageOfLengthUnit((Rocket) null));
|
|
|
|
stabilityUnit.addUnit(new PercentageOfLengthUnit((Rocket) null));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Return a UnitGroup for stability units based on the rocket.
|
|
|
|
* Return a UnitGroup for stability units based on the rocket.
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @param rocket the rocket from which to calculate the caliber
|
|
|
|
* @param rocket the rocket from which to calculate the caliber
|
|
|
|
* @return the unit group
|
|
|
|
* @return the unit group
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public static StabilityUnitGroup stabilityUnits(Rocket rocket) {
|
|
|
|
public static StabilityUnitGroup stabilityUnits(Rocket rocket) {
|
|
|
|
return new StabilityUnitGroup(UnitGroup.UNITS_STABILITY, rocket);
|
|
|
|
return new StabilityUnitGroup(UnitGroup.UNITS_STABILITY, rocket);
|
|
|
|
@ -494,13 +517,13 @@ public class UnitGroup {
|
|
|
|
public static StabilityUnitGroup secondaryStabilityUnits(Rocket rocket) {
|
|
|
|
public static StabilityUnitGroup secondaryStabilityUnits(Rocket rocket) {
|
|
|
|
return new StabilityUnitGroup(UnitGroup.UNITS_SECONDARY_STABILITY, rocket);
|
|
|
|
return new StabilityUnitGroup(UnitGroup.UNITS_SECONDARY_STABILITY, rocket);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Return a UnitGroup for stability units based on the rocket configuration.
|
|
|
|
* Return a UnitGroup for stability units based on the rocket configuration.
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @param config the rocket configuration from which to calculate the caliber
|
|
|
|
* @param config the rocket configuration from which to calculate the caliber
|
|
|
|
* @return the unit group
|
|
|
|
* @return the unit group
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public static StabilityUnitGroup stabilityUnits(FlightConfiguration config) {
|
|
|
|
public static StabilityUnitGroup stabilityUnits(FlightConfiguration config) {
|
|
|
|
return new StabilityUnitGroup(UnitGroup.UNITS_STABILITY, config);
|
|
|
|
return new StabilityUnitGroup(UnitGroup.UNITS_STABILITY, config);
|
|
|
|
@ -515,13 +538,13 @@ public class UnitGroup {
|
|
|
|
public static StabilityUnitGroup secondaryStabilityUnits(FlightConfiguration config) {
|
|
|
|
public static StabilityUnitGroup secondaryStabilityUnits(FlightConfiguration config) {
|
|
|
|
return new StabilityUnitGroup(UnitGroup.UNITS_SECONDARY_STABILITY, config);
|
|
|
|
return new StabilityUnitGroup(UnitGroup.UNITS_SECONDARY_STABILITY, config);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Return a UnitGroup for stability units based on a constant caliber.
|
|
|
|
* Return a UnitGroup for stability units based on a constant caliber.
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @param reference the constant reference length
|
|
|
|
* @param reference the constant reference length
|
|
|
|
* @return the unit group
|
|
|
|
* @return the unit group
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public static UnitGroup stabilityUnits(double reference) {
|
|
|
|
public static UnitGroup stabilityUnits(double reference) {
|
|
|
|
return new StabilityUnitGroup(UnitGroup.UNITS_STABILITY, reference);
|
|
|
|
return new StabilityUnitGroup(UnitGroup.UNITS_STABILITY, reference);
|
|
|
|
@ -536,33 +559,33 @@ public class UnitGroup {
|
|
|
|
public static UnitGroup secondaryStabilityUnits(double reference) {
|
|
|
|
public static UnitGroup secondaryStabilityUnits(double reference) {
|
|
|
|
return new StabilityUnitGroup(UnitGroup.UNITS_SECONDARY_STABILITY, reference);
|
|
|
|
return new StabilityUnitGroup(UnitGroup.UNITS_SECONDARY_STABILITY, reference);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
|
|
//////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected ArrayList<Unit> units = new ArrayList<Unit>();
|
|
|
|
protected ArrayList<Unit> units = new ArrayList<Unit>();
|
|
|
|
protected int defaultUnit = 0;
|
|
|
|
protected int defaultUnit = 0;
|
|
|
|
|
|
|
|
|
|
|
|
public int getUnitCount() {
|
|
|
|
public int getUnitCount() {
|
|
|
|
return units.size();
|
|
|
|
return units.size();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public Unit getDefaultUnit() {
|
|
|
|
public Unit getDefaultUnit() {
|
|
|
|
return units.get(defaultUnit);
|
|
|
|
return units.get(defaultUnit);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public int getDefaultUnitIndex() {
|
|
|
|
public int getDefaultUnitIndex() {
|
|
|
|
return defaultUnit;
|
|
|
|
return defaultUnit;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void setDefaultUnit(int n) {
|
|
|
|
public void setDefaultUnit(int n) {
|
|
|
|
if (n < 0 || n >= units.size()) {
|
|
|
|
if (n < 0 || n >= units.size()) {
|
|
|
|
throw new IllegalArgumentException("index out of range: " + n);
|
|
|
|
throw new IllegalArgumentException("index out of range: " + n);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
defaultUnit = n;
|
|
|
|
defaultUnit = n;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public Unit getSIUnit() {
|
|
|
|
public Unit getSIUnit() {
|
|
|
|
for (Unit u : units) {
|
|
|
|
for (Unit u : units) {
|
|
|
|
if (u.multiplier == 1) {
|
|
|
|
if (u.multiplier == 1) {
|
|
|
|
@ -571,14 +594,14 @@ public class UnitGroup {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return UNITS_NONE.getDefaultUnit();
|
|
|
|
return UNITS_NONE.getDefaultUnit();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Find a unit by approximate unit name. Only letters and (ordinary) numbers are
|
|
|
|
* Find a unit by approximate unit name. Only letters and (ordinary) numbers are
|
|
|
|
* considered in the matching. This method is mainly means for testing, allowing
|
|
|
|
* considered in the matching. This method is mainly means for testing, allowing
|
|
|
|
* a simple means to obtain a particular unit.
|
|
|
|
* a simple means to obtain a particular unit.
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @param str the unit name.
|
|
|
|
* @param str the unit name.
|
|
|
|
* @return the corresponding unit, or <code>null</code> if not found.
|
|
|
|
* @return the corresponding unit, or <code>null</code> if not found.
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public Unit findApproximate(String str) {
|
|
|
|
public Unit findApproximate(String str) {
|
|
|
|
str = str.replaceAll("\\W", "").trim();
|
|
|
|
str = str.replaceAll("\\W", "").trim();
|
|
|
|
@ -589,13 +612,13 @@ public class UnitGroup {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Set the default unit based on the unit name. Throws an exception if a
|
|
|
|
* Set the default unit based on the unit name. Throws an exception if a
|
|
|
|
* unit with the provided name is not available.
|
|
|
|
* unit with the provided name is not available.
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @param name the unit name.
|
|
|
|
* @param name the unit name.
|
|
|
|
* @throws IllegalArgumentException if the corresponding unit is not found in the group.
|
|
|
|
* @throws IllegalArgumentException if the corresponding unit is not found in the group.
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public void setDefaultUnit(String name) throws IllegalArgumentException {
|
|
|
|
public void setDefaultUnit(String name) throws IllegalArgumentException {
|
|
|
|
for (int i = 0; i < units.size(); i++) {
|
|
|
|
for (int i = 0; i < units.size(); i++) {
|
|
|
|
@ -606,7 +629,7 @@ public class UnitGroup {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
throw new IllegalArgumentException("name=" + name);
|
|
|
|
throw new IllegalArgumentException("name=" + name);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public Unit getUnit(String name) throws IllegalArgumentException {
|
|
|
|
public Unit getUnit(String name) throws IllegalArgumentException {
|
|
|
|
for (int i = 0; i < units.size(); i++) {
|
|
|
|
for (int i = 0; i < units.size(); i++) {
|
|
|
|
if (units.get(i).getUnit().equals(name)) {
|
|
|
|
if (units.get(i).getUnit().equals(name)) {
|
|
|
|
@ -615,31 +638,31 @@ public class UnitGroup {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
throw new IllegalArgumentException("name=" + name);
|
|
|
|
throw new IllegalArgumentException("name=" + name);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public Unit getUnit(int n) {
|
|
|
|
public Unit getUnit(int n) {
|
|
|
|
return units.get(n);
|
|
|
|
return units.get(n);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public int getUnitIndex(Unit u) {
|
|
|
|
public int getUnitIndex(Unit u) {
|
|
|
|
return units.indexOf(u);
|
|
|
|
return units.indexOf(u);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void addUnit(Unit u) {
|
|
|
|
public void addUnit(Unit u) {
|
|
|
|
units.add(u);
|
|
|
|
units.add(u);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public boolean contains(Unit u) {
|
|
|
|
public boolean contains(Unit u) {
|
|
|
|
return units.contains(u);
|
|
|
|
return units.contains(u);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public Unit[] getUnits() {
|
|
|
|
public Unit[] getUnits() {
|
|
|
|
return units.toArray(new Unit[0]);
|
|
|
|
return units.toArray(new Unit[0]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Return the value in SI units from the default unit of this group.
|
|
|
|
* Return the value in SI units from the default unit of this group.
|
|
|
|
* It is the same as calling <code>getDefaultUnit().fromUnit(value)</code>
|
|
|
|
* It is the same as calling <code>getDefaultUnit().fromUnit(value)</code>
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @param value the default unit value to convert
|
|
|
|
* @param value the default unit value to convert
|
|
|
|
* @return the value in SI units.
|
|
|
|
* @return the value in SI units.
|
|
|
|
* @see Unit#fromUnit(double)
|
|
|
|
* @see Unit#fromUnit(double)
|
|
|
|
@ -647,51 +670,48 @@ public class UnitGroup {
|
|
|
|
public double fromUnit(double value) {
|
|
|
|
public double fromUnit(double value) {
|
|
|
|
return this.getDefaultUnit().fromUnit(value);
|
|
|
|
return this.getDefaultUnit().fromUnit(value);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Return the value formatted by the default unit of this group.
|
|
|
|
* Return the value formatted by the default unit of this group.
|
|
|
|
* It is the same as calling <code>getDefaultUnit().toString(value)</code>.
|
|
|
|
* It is the same as calling <code>getDefaultUnit().toString(value)</code>.
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @param value the SI value to format.
|
|
|
|
* @param value the SI value to format.
|
|
|
|
* @return the formatted string.
|
|
|
|
* @return the formatted string.
|
|
|
|
* @see Unit#toString(double)
|
|
|
|
* @see Unit#toString(double)
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public String toString(double value) {
|
|
|
|
public String toString(double value) {
|
|
|
|
return this.getDefaultUnit().toString(value);
|
|
|
|
return this.getDefaultUnit().toString(value);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Return the value formatted by the default unit of this group including the unit.
|
|
|
|
* Return the value formatted by the default unit of this group including the unit.
|
|
|
|
* It is the same as calling <code>getDefaultUnit().toStringUnit(value)</code>.
|
|
|
|
* It is the same as calling <code>getDefaultUnit().toStringUnit(value)</code>.
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @param value the SI value to format.
|
|
|
|
* @param value the SI value to format.
|
|
|
|
* @return the formatted string.
|
|
|
|
* @return the formatted string.
|
|
|
|
* @see Unit#toStringUnit(double)
|
|
|
|
* @see Unit#toStringUnit(double)
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public String toStringUnit(double value) {
|
|
|
|
public String toStringUnit(double value) {
|
|
|
|
return this.getDefaultUnit().toStringUnit(value);
|
|
|
|
return this.getDefaultUnit().toStringUnit(value);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Creates a new Value object with the specified value and the default unit of this group.
|
|
|
|
* Creates a new Value object with the specified value and the default unit of this group.
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @param value the value to set.
|
|
|
|
* @param value the value to set.
|
|
|
|
* @return a new Value object.
|
|
|
|
* @return a new Value object.
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public Value toValue(double value) {
|
|
|
|
public Value toValue(double value) {
|
|
|
|
return this.getDefaultUnit().toValue(value);
|
|
|
|
return this.getDefaultUnit().toValue(value);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public String toString() {
|
|
|
|
public String toString() {
|
|
|
|
return this.getClass().getSimpleName() + ":" + this.getSIUnit().toString();
|
|
|
|
return this.getClass().getSimpleName() + ":" + this.getSIUnit().toString();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public boolean equals(Object o) {
|
|
|
|
public boolean equals(Object o) {
|
|
|
|
UnitGroup u = (UnitGroup) o;
|
|
|
|
UnitGroup u = (UnitGroup) o;
|
|
|
|
@ -699,43 +719,43 @@ public class UnitGroup {
|
|
|
|
if (size != u.units.size()) {
|
|
|
|
if (size != u.units.size()) {
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < size; i++) {
|
|
|
|
for (int i = 0; i < size; i++) {
|
|
|
|
if (!units.get(i).equals(u.units.get(i))) {
|
|
|
|
if (!units.get(i).equals(u.units.get(i))) {
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static final Pattern STRING_PATTERN = Pattern.compile("^\\s*([0-9.,-]+)(.*?)$");
|
|
|
|
private static final Pattern STRING_PATTERN = Pattern.compile("^\\s*([0-9.,-]+)(.*?)$");
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Converts a string into an SI value. If the string has one of the units in this
|
|
|
|
* Converts a string into an SI value. If the string has one of the units in this
|
|
|
|
* group appended to it, that unit will be used in conversion. Otherwise the default
|
|
|
|
* group appended to it, that unit will be used in conversion. Otherwise the default
|
|
|
|
* unit will be used. If an unknown unit is specified or the value does not parse
|
|
|
|
* unit will be used. If an unknown unit is specified or the value does not parse
|
|
|
|
* with <code>Double.parseDouble</code> then a <code>NumberFormatException</code>
|
|
|
|
* with <code>Double.parseDouble</code> then a <code>NumberFormatException</code>
|
|
|
|
* is thrown.
|
|
|
|
* is thrown.
|
|
|
|
* <p>
|
|
|
|
* <p>
|
|
|
|
* This method is applicable only for simple units without e.g. powers.
|
|
|
|
* This method is applicable only for simple units without e.g. powers.
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @param str the string to parse.
|
|
|
|
* @param str the string to parse.
|
|
|
|
* @return the SI value.
|
|
|
|
* @return the SI value.
|
|
|
|
* @throws NumberFormatException if the string cannot be parsed.
|
|
|
|
* @throws NumberFormatException if the string cannot be parsed.
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public double fromString(String str) {
|
|
|
|
public double fromString(String str) {
|
|
|
|
Matcher matcher = STRING_PATTERN.matcher(str);
|
|
|
|
Matcher matcher = STRING_PATTERN.matcher(str);
|
|
|
|
|
|
|
|
|
|
|
|
if (!matcher.matches()) {
|
|
|
|
if (!matcher.matches()) {
|
|
|
|
throw new NumberFormatException("string did not match required pattern");
|
|
|
|
throw new NumberFormatException("string did not match required pattern");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
double value = StringUtils.convertToDouble(matcher.group(1));
|
|
|
|
double value = StringUtils.convertToDouble(matcher.group(1));
|
|
|
|
String unit = matcher.group(2).trim();
|
|
|
|
String unit = matcher.group(2).trim();
|
|
|
|
|
|
|
|
|
|
|
|
if (unit.equals("")) {
|
|
|
|
if (unit.equals("")) {
|
|
|
|
value = this.getDefaultUnit().fromUnit(value);
|
|
|
|
value = this.getDefaultUnit().fromUnit(value);
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
@ -751,14 +771,14 @@ public class UnitGroup {
|
|
|
|
throw new NumberFormatException("unknown unit " + unit);
|
|
|
|
throw new NumberFormatException("unknown unit " + unit);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return value;
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
///////////////////////////
|
|
|
|
///////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public int hashCode() {
|
|
|
|
public int hashCode() {
|
|
|
|
int code = 0;
|
|
|
|
int code = 0;
|
|
|
|
@ -767,7 +787,7 @@ public class UnitGroup {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return code;
|
|
|
|
return code;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* A private class that switches the CaliberUnit to a rocket-specific CaliberUnit.
|
|
|
|
* A private class that switches the CaliberUnit to a rocket-specific CaliberUnit.
|
|
|
|
* All other methods are passed through to UNITS_STABILITY.
|
|
|
|
* All other methods are passed through to UNITS_STABILITY.
|
|
|
|
@ -775,11 +795,11 @@ public class UnitGroup {
|
|
|
|
public static class StabilityUnitGroup extends UnitGroup {
|
|
|
|
public static class StabilityUnitGroup extends UnitGroup {
|
|
|
|
private final PercentageOfLengthUnit percentageOfLengthUnit;
|
|
|
|
private final PercentageOfLengthUnit percentageOfLengthUnit;
|
|
|
|
private final UnitGroup stabilityUnit;
|
|
|
|
private final UnitGroup stabilityUnit;
|
|
|
|
|
|
|
|
|
|
|
|
public StabilityUnitGroup(UnitGroup stabilityUnit, double ref) {
|
|
|
|
public StabilityUnitGroup(UnitGroup stabilityUnit, double ref) {
|
|
|
|
this(stabilityUnit, new CaliberUnit(ref), new PercentageOfLengthUnit(ref));
|
|
|
|
this(stabilityUnit, new CaliberUnit(ref), new PercentageOfLengthUnit(ref));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public StabilityUnitGroup(UnitGroup stabilityUnit, Rocket rocket) {
|
|
|
|
public StabilityUnitGroup(UnitGroup stabilityUnit, Rocket rocket) {
|
|
|
|
this(stabilityUnit, new CaliberUnit(rocket), new PercentageOfLengthUnit(rocket));
|
|
|
|
this(stabilityUnit, new CaliberUnit(rocket), new PercentageOfLengthUnit(rocket));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -787,7 +807,7 @@ public class UnitGroup {
|
|
|
|
public StabilityUnitGroup(UnitGroup stabilityUnit, FlightConfiguration config) {
|
|
|
|
public StabilityUnitGroup(UnitGroup stabilityUnit, FlightConfiguration config) {
|
|
|
|
this(stabilityUnit, new CaliberUnit(config), new PercentageOfLengthUnit(config));
|
|
|
|
this(stabilityUnit, new CaliberUnit(config), new PercentageOfLengthUnit(config));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private StabilityUnitGroup(UnitGroup stabilityUnit, CaliberUnit caliberUnit, PercentageOfLengthUnit percentageOfLengthUnit) {
|
|
|
|
private StabilityUnitGroup(UnitGroup stabilityUnit, CaliberUnit caliberUnit, PercentageOfLengthUnit percentageOfLengthUnit) {
|
|
|
|
this.percentageOfLengthUnit = percentageOfLengthUnit;
|
|
|
|
this.percentageOfLengthUnit = percentageOfLengthUnit;
|
|
|
|
this.stabilityUnit = stabilityUnit;
|
|
|
|
this.stabilityUnit = stabilityUnit;
|
|
|
|
|