public static final UnitGroup UNITS_MOTOR_DIMENSIONS;
public static final UnitGroup UNITS_LENGTH;
+ public static final UnitGroup UNITS_ALL_LENGTHS;
public static final UnitGroup UNITS_DISTANCE;
public static final UnitGroup UNITS_AREA;
*/
public static final UnitGroup UNITS_STABILITY_CALIBERS;
public static final UnitGroup UNITS_VELOCITY;
+ public static final UnitGroup UNITS_WINDSPEED;
public static final UnitGroup UNITS_ACCELERATION;
public static final UnitGroup UNITS_MASS;
public static final UnitGroup UNITS_INERTIA;
public static final UnitGroup UNITS_ROUGHNESS;
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_POWER;
+ public static final UnitGroup UNITS_MOMENTUM;
+ public static final UnitGroup UNITS_VOLTAGE;
+ public static final UnitGroup UNITS_CURRENT;
- public static final Map<String, UnitGroup> UNITS;
+ 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"
/*
UNITS_NONE = new UnitGroup();
UNITS_NONE.addUnit(Unit.NOUNIT2);
+ UNITS_ENERGY = new UnitGroup();
+ UNITS_ENERGY.addUnit(new GeneralUnit(1, "J"));
+ UNITS_ENERGY.addUnit(new GeneralUnit(1e-7, "erg"));
+ UNITS_ENERGY.addUnit(new GeneralUnit(1.055, "BTU"));
+ UNITS_ENERGY.addUnit(new GeneralUnit(4.184, "cal"));
+ UNITS_ENERGY.addUnit(new GeneralUnit(1.3558179483314, "ft"+DOT+"lbf"));
+ UNITS_ENERGY.setDefaultUnit(0);
+
+ UNITS_POWER = new UnitGroup();
+ UNITS_POWER.addUnit(new GeneralUnit(1e-3, "mW"));
+ UNITS_POWER.addUnit(new GeneralUnit(1, "W"));
+ UNITS_POWER.addUnit(new GeneralUnit(1e3, "kW"));
+ UNITS_POWER.addUnit(new GeneralUnit(1e-7, "ergs"));
+ UNITS_POWER.addUnit(new GeneralUnit(745.699872, "hp"));
+ UNITS_POWER.setDefaultUnit(1);
+
+ UNITS_MOMENTUM = new UnitGroup();
+ UNITS_MOMENTUM.addUnit(new GeneralUnit(1, "kg"+DOT+"m/s"));
+ UNITS_MOMENTUM.setDefaultUnit(0);
+
+ UNITS_VOLTAGE = new UnitGroup();
+ UNITS_VOLTAGE.addUnit(new GeneralUnit(1e-3, "mV"));
+ UNITS_VOLTAGE.addUnit(new GeneralUnit(1, "V"));
+ UNITS_VOLTAGE.setDefaultUnit(1);
+
+ UNITS_CURRENT = new UnitGroup();
+ UNITS_CURRENT.addUnit(new GeneralUnit(1e-3, "mA"));
+ UNITS_CURRENT.addUnit(new GeneralUnit(1, "A"));
+ UNITS_CURRENT.setDefaultUnit(1);
+
UNITS_LENGTH = new UnitGroup();
UNITS_LENGTH.addUnit(new GeneralUnit(0.001, "mm"));
UNITS_LENGTH.addUnit(new GeneralUnit(0.01, "cm"));
UNITS_LENGTH.addUnit(new GeneralUnit(1, "m"));
UNITS_LENGTH.addUnit(new GeneralUnit(0.0254, "in"));
- UNITS_LENGTH.addUnit(new FractionalUnit(0.0254, "in/64", "in", 64, 1d/16d));
+ 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.setDefaultUnit(1);
UNITS_MOTOR_DIMENSIONS = new UnitGroup();
+ UNITS_MOTOR_DIMENSIONS.addUnit(new GeneralUnit(1, "m")); // just added
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.0254, "in"));
UNITS_DISTANCE.addUnit(new GeneralUnit(1609.344, "mi"));
UNITS_DISTANCE.addUnit(new GeneralUnit(1852, "nmi"));
+ UNITS_ALL_LENGTHS = new UnitGroup();
+ UNITS_ALL_LENGTHS.addUnit(new GeneralUnit(0.001, "mm"));
+ UNITS_ALL_LENGTHS.addUnit(new GeneralUnit(0.01, "cm"));
+ UNITS_ALL_LENGTHS.addUnit(new GeneralUnit(1, "m"));
+ UNITS_ALL_LENGTHS.addUnit(new GeneralUnit(1000, "km"));
+ UNITS_ALL_LENGTHS.addUnit(new GeneralUnit(0.0254, "in"));
+ UNITS_ALL_LENGTHS.addUnit(new FractionalUnit(0.0254, "in/64", "in", 64, 1d / 16d, 0.5d / 64d));
+ UNITS_ALL_LENGTHS.addUnit(new GeneralUnit(0.3048, "ft"));
+ UNITS_ALL_LENGTHS.addUnit(new GeneralUnit(0.9144, "yd"));
+ UNITS_ALL_LENGTHS.addUnit(new GeneralUnit(1609.344, "mi"));
+ UNITS_ALL_LENGTHS.addUnit(new GeneralUnit(1852, "nmi"));
+ UNITS_ALL_LENGTHS.setDefaultUnit(2);
+
UNITS_AREA = new UnitGroup();
UNITS_AREA.addUnit(new GeneralUnit(pow2(0.001), "mm" + SQUARED));
UNITS_AREA.addUnit(new GeneralUnit(pow2(0.01), "cm" + SQUARED));
UNITS_STABILITY = new UnitGroup();
+ UNITS_STABILITY.addUnit(new GeneralUnit(1, "m"));
UNITS_STABILITY.addUnit(new GeneralUnit(0.001, "mm"));
UNITS_STABILITY.addUnit(new GeneralUnit(0.01, "cm"));
UNITS_STABILITY.addUnit(new GeneralUnit(0.0254, "in"));
UNITS_VELOCITY.addUnit(new GeneralUnit(0.3048, "ft/s"));
UNITS_VELOCITY.addUnit(new GeneralUnit(0.44704, "mph"));
+ UNITS_WINDSPEED = new UnitGroup();
+ UNITS_WINDSPEED.addUnit(new GeneralUnit(1, "m/s"));
+ 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.44704, "mph"));
+
UNITS_ACCELERATION = new UnitGroup();
UNITS_ACCELERATION.addUnit(new GeneralUnit(1, "m/s" + SQUARED));
UNITS_ACCELERATION.addUnit(new GeneralUnit(0.3048, "ft/s" + SQUARED));
UNITS_DENSITY_BULK = new UnitGroup();
UNITS_DENSITY_BULK.addUnit(new GeneralUnit(1000, "g/cm" + CUBED));
+ UNITS_DENSITY_BULK.addUnit(new GeneralUnit(1000, "kg/dm" + 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(16.0184634, "lb/ft" + CUBED));
UNITS_ROUGHNESS = new UnitGroup();
+ UNITS_ROUGHNESS.addUnit(new GeneralUnit(1, "m")); // just added
UNITS_ROUGHNESS.addUnit(new GeneralUnit(0.000001, MICRO + "m"));
UNITS_ROUGHNESS.addUnit(new GeneralUnit(0.0000254, "mil"));
// This is not used by OpenRocket, and not extensively tested:
- // UNITS_FREQUENCY = new UnitGroup();
+ UNITS_FREQUENCY = new UnitGroup();
// UNITS_FREQUENCY.addUnit(new GeneralUnit(1, "s"));
// UNITS_FREQUENCY.addUnit(new GeneralUnit(0.001, "ms"));
// UNITS_FREQUENCY.addUnit(new GeneralUnit(0.000001, MICRO + "s"));
- // UNITS_FREQUENCY.addUnit(new FrequencyUnit(1, "Hz"));
- // UNITS_FREQUENCY.addUnit(new FrequencyUnit(1000, "kHz"));
- // UNITS_FREQUENCY.setDefaultUnit(3);
+ UNITS_FREQUENCY.addUnit(new FrequencyUnit(.001, "mHz"));
+ UNITS_FREQUENCY.addUnit(new FrequencyUnit(1, "Hz"));
+ UNITS_FREQUENCY.addUnit(new FrequencyUnit(1000, "kHz"));
+ UNITS_FREQUENCY.setDefaultUnit(1);
HashMap<String, UnitGroup> map = new HashMap<String, UnitGroup>();
map.put("NONE", UNITS_NONE);
map.put("LENGTH", UNITS_LENGTH);
+ map.put("ALL_LENGTHS", UNITS_ALL_LENGTHS);
map.put("MOTOR_DIMENSIONS", UNITS_MOTOR_DIMENSIONS);
map.put("DISTANCE", UNITS_DISTANCE);
map.put("VELOCITY", UNITS_VELOCITY);
map.put("RELATIVE", UNITS_RELATIVE);
map.put("ROUGHNESS", UNITS_ROUGHNESS);
map.put("COEFFICIENT", UNITS_COEFFICIENT);
+ map.put("VOLTAGE", UNITS_VOLTAGE);
+ map.put("CURRENT", UNITS_CURRENT);
+ map.put("ENERGY", UNITS_ENERGY);
+ map.put("POWER", UNITS_POWER);
+ map.put("MOMENTUM", UNITS_MOMENTUM);
+ map.put("FREQUENCY", UNITS_FREQUENCY);
UNITS = Collections.unmodifiableMap(map);
+
+ HashMap<String, UnitGroup> simap = new HashMap<String, UnitGroup>();
+ simap.put("m", UNITS_ALL_LENGTHS);
+ simap.put("m^2", UNITS_AREA);
+ simap.put("m/s", UNITS_VELOCITY);
+ simap.put("m/s^2", UNITS_ACCELERATION);
+ simap.put("kg", UNITS_MASS);
+ simap.put("kg m^2", UNITS_INERTIA);
+ simap.put("kg/m^3", UNITS_DENSITY_BULK);
+ simap.put("N", UNITS_FORCE);
+ simap.put("Ns", UNITS_IMPULSE);
+ simap.put("s", UNITS_FLIGHT_TIME);
+ simap.put("Pa", UNITS_PRESSURE);
+ simap.put("V", UNITS_VOLTAGE);
+ simap.put("A", UNITS_CURRENT);
+ simap.put("J", UNITS_ENERGY);
+ simap.put("W", UNITS_POWER);
+ simap.put("kg m/s", UNITS_MOMENTUM);
+ simap.put("Hz", UNITS_FREQUENCY);
+ simap.put("K", UNITS_TEMPERATURE);
+
+ SIUNITS = Collections.unmodifiableMap(simap);
}
public static void setDefaultMetricUnits() {
UNITS_FLIGHT_TIME.setDefaultUnit("s");
UNITS_ROLL.setDefaultUnit("r/s");
UNITS_TEMPERATURE.setDefaultUnit(DEGREE + "C");
+ UNITS_WINDSPEED.setDefaultUnit("m/s");
UNITS_PRESSURE.setDefaultUnit("mbar");
UNITS_RELATIVE.setDefaultUnit("%");
UNITS_ROUGHNESS.setDefaultUnit(MICRO + "m");
UNITS_FLIGHT_TIME.setDefaultUnit("s");
UNITS_ROLL.setDefaultUnit("r/s");
UNITS_TEMPERATURE.setDefaultUnit(DEGREE + "F");
+ UNITS_WINDSPEED.setDefaultUnit("mph");
UNITS_PRESSURE.setDefaultUnit("mbar");
UNITS_RELATIVE.setDefaultUnit("%");
UNITS_ROUGHNESS.setDefaultUnit("mil");
defaultUnit = n;
}
-
+ public Unit getSIUnit(){
+ for (Unit u : units){
+ if (u.multiplier == 1){
+ return u;
+ }
+ }
+ return UNITS_NONE.getDefaultUnit();
+ }
/**
* Find a unit by approximate unit name. Only letters and (ordinary) numbers are
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++) {
if (units.get(i).getUnit().equals(name)) {
return units.get(i);
return units.toArray(new Unit[0]);
}
+ /**
+ * Return the value in SI units from the default unit of this group.
+ * It is the same as calling <code>getDefaultUnit().fromUnit(value)</code>
+ *
+ * @param value the default unit value to convert
+ * @return the value in SI units.
+ * @see Unit#fromUnit(double)
+ */
+ public double fromUnit( double value ) {
+ return this.getDefaultUnit().fromUnit(value);
+ }
/**
* Return the value formatted by the default unit of this group.
return this.getDefaultUnit().toValue(value);
}
+ @Override
+ public String toString(){
+ return this.getClass().getSimpleName()+":"+this.getSIUnit().toString();
+ }
+ @Override
+ public boolean equals(Object o){
+ UnitGroup u = (UnitGroup) o;
+ int size = units.size();
+ if (size != u.units.size()){
+ return false;
+ }
+
+ for (int i=0; i<size; i++){
+ if ( !units.get(i).equals(u.units.get(i)) ){
+ return false;
+ }
+ }
+
+ return true;
+
+ }
private static final Pattern STRING_PATTERN = Pattern.compile("^\\s*([0-9.,-]+)(.*?)$");
///////////////////////////
+ @Override
+ public int hashCode() {
+ int code = 0;
+ for (Unit u : units){
+ code = code + u.hashCode();
+ }
+ return code;
+ }
+
/**
* A private class that switches the CaliberUnit to a rocket-specific CaliberUnit.
* All other methods are passed through to UNITS_STABILITY.