diff options
Diffstat (limited to 'altoslib')
| -rw-r--r-- | altoslib/AltosAccel.java | 20 | ||||
| -rw-r--r-- | altoslib/AltosConvert.java | 12 | ||||
| -rw-r--r-- | altoslib/AltosDistance.java | 26 | ||||
| -rw-r--r-- | altoslib/AltosHeight.java | 21 | ||||
| -rw-r--r-- | altoslib/AltosPyro.java | 68 | ||||
| -rw-r--r-- | altoslib/AltosSpeed.java | 20 | ||||
| -rw-r--r-- | altoslib/AltosTemperature.java | 20 | ||||
| -rw-r--r-- | altoslib/AltosUnits.java | 77 | 
8 files changed, 182 insertions, 82 deletions
diff --git a/altoslib/AltosAccel.java b/altoslib/AltosAccel.java index 08eba359..b838d30b 100644 --- a/altoslib/AltosAccel.java +++ b/altoslib/AltosAccel.java @@ -19,25 +19,31 @@ package org.altusmetrum.altoslib_2;  public class AltosAccel extends AltosUnits { -	public double value(double v) { -		if (AltosConvert.imperial_units) +	public double value(double v, boolean imperial_units) { +		if (imperial_units)  			return AltosConvert.meters_to_feet(v);  		return v;  	} -	public String show_units() { -		if (AltosConvert.imperial_units) +	public double inverse(double v, boolean imperial_units) { +		if (imperial_units) +			return AltosConvert.feet_to_meters(v); +		return v; +	} + +	public String show_units(boolean imperial_units) { +		if (imperial_units)  			return "ft/s²";  		return "m/s²";  	} -	public String say_units() { -		if (AltosConvert.imperial_units) +	public String say_units(boolean imperial_units) { +		if (imperial_units)  			return "feet per second squared";  		return "meters per second squared";  	} -	public int show_fraction(int width) { +	public int show_fraction(int width, boolean imperial_units) {  		return width / 9;  	}  }
\ No newline at end of file diff --git a/altoslib/AltosConvert.java b/altoslib/AltosConvert.java index 760d9eb9..8d0b74dd 100644 --- a/altoslib/AltosConvert.java +++ b/altoslib/AltosConvert.java @@ -290,10 +290,18 @@ public class AltosConvert {  		return meters_to_feet(meters) / 5280;  	} +	public static double miles_to_meters(double miles) { +		return feet_to_meters(miles * 5280); +	} +  	public static double meters_to_mph(double mps) {  		return meters_to_miles(mps) * 3600;   	} +	public static double mph_to_meters(double mps) { +		return miles_to_meters(mps) / 3600; + 	} +  	public static double meters_to_mach(double meters) {  		return meters / 343;		/* something close to mach at usual rocket sites */  	} @@ -306,6 +314,10 @@ public class AltosConvert {  		return c * 9/5 + 32;  	} +	public static double f_to_c(double c) { +		return (c - 32) * 5/9; +	} +  	public static boolean imperial_units = false;  	public static AltosDistance distance = new AltosDistance(); diff --git a/altoslib/AltosDistance.java b/altoslib/AltosDistance.java index 56257165..8d359feb 100644 --- a/altoslib/AltosDistance.java +++ b/altoslib/AltosDistance.java @@ -19,32 +19,38 @@ package org.altusmetrum.altoslib_2;  public class AltosDistance extends AltosUnits { -	public double value(double v) { -		if (AltosConvert.imperial_units) +	public double value(double v, boolean imperial_units) { +		if (imperial_units)  			return AltosConvert.meters_to_miles(v);  		return v;  	} -	public String show_units() { -		if (AltosConvert.imperial_units) +	public double inverse(double v, boolean imperial_units) { +		if (imperial_units) +			return AltosConvert.miles_to_meters(v); +		return v; +	} + +	public String show_units(boolean imperial_units) { +		if (imperial_units)  			return "miles";  		return "m";  	} -	public String say_units() { -		if (AltosConvert.imperial_units) +	public String say_units(boolean imperial_units) { +		if (imperial_units)  			return "miles";  		return "meters";  	} -	public int show_fraction(int width) { -		if (AltosConvert.imperial_units) +	public int show_fraction(int width, boolean imperial_units) { +		if (imperial_units)  			return width / 3;  		return width / 9;  	} -	public int say_fraction() { -		if (AltosConvert.imperial_units) +	public int say_fraction(boolean imperial_units) { +		if (imperial_units)  			return 1;  		return 0;  	} diff --git a/altoslib/AltosHeight.java b/altoslib/AltosHeight.java index 1d2e4dbc..84bd42d9 100644 --- a/altoslib/AltosHeight.java +++ b/altoslib/AltosHeight.java @@ -19,32 +19,31 @@ package org.altusmetrum.altoslib_2;  public class AltosHeight extends AltosUnits { -	public double value(double v) { -		if (AltosConvert.imperial_units) +	public double value(double v, boolean imperial_units) { +		if (imperial_units)  			return AltosConvert.meters_to_feet(v);  		return v;  	} -	public double parse(String s) throws NumberFormatException { -		double	v = Double.parseDouble(s); -		if (AltosConvert.imperial_units) -			v = AltosConvert.feet_to_meters(v); +	public double inverse(double v, boolean imperial_units) { +		if (imperial_units) +			return AltosConvert.feet_to_meters(v);  		return v;  	} -	public String show_units() { -		if (AltosConvert.imperial_units) +	public String show_units(boolean imperial_units) { +		if (imperial_units)  			return "ft";  		return "m";  	} -	public String say_units() { -		if (AltosConvert.imperial_units) +	public String say_units(boolean imperial_units) { +		if (imperial_units)  			return "feet";  		return "meters";  	} -	public int show_fraction(int width) { +	public int show_fraction(int width, boolean imperial_units) {  		return width / 9;  	}  }
\ No newline at end of file diff --git a/altoslib/AltosPyro.java b/altoslib/AltosPyro.java index 0142eac8..a219468c 100644 --- a/altoslib/AltosPyro.java +++ b/altoslib/AltosPyro.java @@ -28,24 +28,24 @@ public class AltosPyro {  	public static final int pyro_accel_greater		= 0x00000002;  	public static final String pyro_accel_less_string	= "a<";  	public static final String pyro_accel_greater_string	= "a>"; -	public static final String pyro_accel_less_name		= "Acceleration less than (m/s²)"; -	public static final String pyro_accel_greater_name	= "Acceleration greater than (m/s²)"; +	public static final String pyro_accel_less_name		= "Acceleration less than"; +	public static final String pyro_accel_greater_name	= "Acceleration greater than";  	public static final double pyro_accel_scale		= 16.0;  	public static final int pyro_speed_less			= 0x00000004;  	public static final int pyro_speed_greater		= 0x00000008;  	public static final String pyro_speed_less_string	= "s<";  	public static final String pyro_speed_greater_string	= "s>"; -	public static final String pyro_speed_less_name		= "Speed less than (m/s)"; -	public static final String pyro_speed_greater_name	= "Speed greater than (m/s)"; +	public static final String pyro_speed_less_name		= "Speed less than"; +	public static final String pyro_speed_greater_name	= "Speed greater than";  	public static final double pyro_speed_scale		= 16.0;  	public static final int pyro_height_less		= 0x00000010;  	public static final int pyro_height_greater		= 0x00000020;  	public static final String pyro_height_less_string	= "h<";  	public static final String pyro_height_greater_string	= "h>"; -	public static final String pyro_height_less_name	= "Height less than (m)"; -	public static final String pyro_height_greater_name	= "Height greater than (m)"; +	public static final String pyro_height_less_name	= "Height less than"; +	public static final String pyro_height_greater_name	= "Height greater than";  	public static final double pyro_height_scale		= 1.0;  	public static final int pyro_orient_less		= 0x00000040; @@ -102,12 +102,16 @@ public class AltosPyro {  	private static HashMap<Integer,String> pyro_to_name = new HashMap<Integer,String>(); +	private static HashMap<Integer,AltosUnits> pyro_to_units = new HashMap<Integer,AltosUnits>(); +  	private static HashMap<Integer,Double> pyro_to_scale = new HashMap<Integer,Double>(); -	private static void insert_map(int flag, String string, String name, double scale) { +	private static void insert_map(int flag, String string, String name, AltosUnits units, double scale) {  		string_to_pyro.put(string, flag);  		pyro_to_string.put(flag, string);  		pyro_to_name.put(flag, name); +		if (units != null) +			pyro_to_units.put(flag, units);  		pyro_to_scale.put(flag, scale);  	} @@ -124,8 +128,22 @@ public class AltosPyro {  	}  	public static String pyro_to_name(int flag) { -		if (pyro_to_name.containsKey(flag)) -			return pyro_to_name.get(flag); +		String		name; +		AltosUnits	units = null; +		if (!pyro_to_name.containsKey(flag)) +			return null; + +		name = pyro_to_name.get(flag); +		if (pyro_to_units.containsKey(flag)) +			units = pyro_to_units.get(flag); +		if (units == null) +			return name; +		return String.format ("%s (%s)", name, units.show_units()); +	} + +	public static AltosUnits pyro_to_units(int flag) { +		if (pyro_to_units.containsKey(flag)) +			return pyro_to_units.get(flag);  		return null;  	} @@ -136,29 +154,29 @@ public class AltosPyro {  	}  	private static void initialize_maps() { -		insert_map(pyro_accel_less, pyro_accel_less_string, pyro_accel_less_name, pyro_accel_scale); -		insert_map(pyro_accel_greater, pyro_accel_greater_string, pyro_accel_greater_name, pyro_accel_scale); +		insert_map(pyro_accel_less, pyro_accel_less_string, pyro_accel_less_name, AltosConvert.accel, pyro_accel_scale); +		insert_map(pyro_accel_greater, pyro_accel_greater_string, pyro_accel_greater_name, AltosConvert.accel, pyro_accel_scale); -		insert_map(pyro_speed_less, pyro_speed_less_string, pyro_speed_less_name, pyro_speed_scale); -		insert_map(pyro_speed_greater, pyro_speed_greater_string, pyro_speed_greater_name, pyro_speed_scale); +		insert_map(pyro_speed_less, pyro_speed_less_string, pyro_speed_less_name, AltosConvert.speed, pyro_speed_scale); +		insert_map(pyro_speed_greater, pyro_speed_greater_string, pyro_speed_greater_name, AltosConvert.speed, pyro_speed_scale); -		insert_map(pyro_height_less, pyro_height_less_string, pyro_height_less_name, pyro_height_scale); -		insert_map(pyro_height_greater, pyro_height_greater_string, pyro_height_greater_name, pyro_height_scale); +		insert_map(pyro_height_less, pyro_height_less_string, pyro_height_less_name, AltosConvert.height, pyro_height_scale); +		insert_map(pyro_height_greater, pyro_height_greater_string, pyro_height_greater_name, AltosConvert.height, pyro_height_scale); -		insert_map(pyro_orient_less, pyro_orient_less_string, pyro_orient_less_name, pyro_orient_scale); -		insert_map(pyro_orient_greater, pyro_orient_greater_string, pyro_orient_greater_name, pyro_orient_scale); +		insert_map(pyro_orient_less, pyro_orient_less_string, pyro_orient_less_name, null, pyro_orient_scale); +		insert_map(pyro_orient_greater, pyro_orient_greater_string, pyro_orient_greater_name, null, pyro_orient_scale); -		insert_map(pyro_time_less, pyro_time_less_string, pyro_time_less_name, pyro_time_scale); -		insert_map(pyro_time_greater, pyro_time_greater_string, pyro_time_greater_name, pyro_time_scale); +		insert_map(pyro_time_less, pyro_time_less_string, pyro_time_less_name, null, pyro_time_scale); +		insert_map(pyro_time_greater, pyro_time_greater_string, pyro_time_greater_name, null, pyro_time_scale); -		insert_map(pyro_ascending, pyro_ascending_string, pyro_ascending_name, 1.0); -		insert_map(pyro_descending, pyro_descending_string, pyro_descending_name, 1.0); +		insert_map(pyro_ascending, pyro_ascending_string, pyro_ascending_name, null, 1.0); +		insert_map(pyro_descending, pyro_descending_string, pyro_descending_name, null, 1.0); -		insert_map(pyro_after_motor, pyro_after_motor_string, pyro_after_motor_name, 1.0); -		insert_map(pyro_delay, pyro_delay_string, pyro_delay_name, pyro_delay_scale); +		insert_map(pyro_after_motor, pyro_after_motor_string, pyro_after_motor_name, null, 1.0); +		insert_map(pyro_delay, pyro_delay_string, pyro_delay_name, null, pyro_delay_scale); -		insert_map(pyro_state_less, pyro_state_less_string, pyro_state_less_name, 1.0); -		insert_map(pyro_state_greater_or_equal, pyro_state_greater_or_equal_string, pyro_state_greater_or_equal_name, 1.0); +		insert_map(pyro_state_less, pyro_state_less_string, pyro_state_less_name, null, 1.0); +		insert_map(pyro_state_greater_or_equal, pyro_state_greater_or_equal_string, pyro_state_greater_or_equal_name, null, 1.0);  	}  	{ diff --git a/altoslib/AltosSpeed.java b/altoslib/AltosSpeed.java index 9b9f7240..6618c539 100644 --- a/altoslib/AltosSpeed.java +++ b/altoslib/AltosSpeed.java @@ -19,25 +19,31 @@ package org.altusmetrum.altoslib_2;  public class AltosSpeed extends AltosUnits { -	public double value(double v) { -		if (AltosConvert.imperial_units) +	public double value(double v, boolean imperial_units) { +		if (imperial_units)  			return AltosConvert.meters_to_mph(v);  		return v;  	} -	public String show_units() { -		if (AltosConvert.imperial_units) +	public double inverse(double v, boolean imperial_units) { +		if (imperial_units) +			return AltosConvert.mph_to_meters(v); +		return v; +	} + +	public String show_units(boolean imperial_units) { +		if (imperial_units)  			return "mph";  		return "m/s";  	} -	public String say_units() { -		if (AltosConvert.imperial_units) +	public String say_units(boolean imperial_units) { +		if (imperial_units)  			return "miles per hour";  		return "meters per second";  	} -	public int show_fraction(int width) { +	public int show_fraction(int width, boolean imperial_units) {  		return width / 9;  	}  }
\ No newline at end of file diff --git a/altoslib/AltosTemperature.java b/altoslib/AltosTemperature.java index 0105fe53..a636533f 100644 --- a/altoslib/AltosTemperature.java +++ b/altoslib/AltosTemperature.java @@ -19,25 +19,31 @@ package org.altusmetrum.altoslib_2;  public class AltosTemperature extends AltosUnits { -	public double value(double v) { -		if (AltosConvert.imperial_units) +	public double value(double v, boolean imperial_units) { +		if (imperial_units)  			return AltosConvert.c_to_f(v);  		return v;  	} -	public String show_units() { -		if (AltosConvert.imperial_units) +	public double inverse(double v, boolean imperial_units) { +		if (imperial_units) +			return AltosConvert.f_to_c(v); +		return v; +	} + +	public String show_units(boolean imperial_units) { +		if (imperial_units)  			return "°F";  		return "°C";  	} -	public String say_units() { -		if (AltosConvert.imperial_units) +	public String say_units(boolean imperial_units) { +		if (imperial_units)  			return "degrees farenheit";  		return "degrees celsius";  	} -	public int show_fraction(int width) { +	public int show_fraction(int width, boolean imperial_units) {  		return width / 3;  	}  } diff --git a/altoslib/AltosUnits.java b/altoslib/AltosUnits.java index ee74f916..8f9ccded 100644 --- a/altoslib/AltosUnits.java +++ b/altoslib/AltosUnits.java @@ -19,43 +19,90 @@ package org.altusmetrum.altoslib_2;  public abstract class AltosUnits { -	public abstract double value(double v); +	public abstract double value(double v, boolean imperial_units); -	public abstract String show_units(); +	public abstract double inverse(double v, boolean imperial_units); -	public abstract String say_units(); +	public abstract String show_units(boolean imperial_units); -	public abstract int show_fraction(int width); +	public abstract String say_units(boolean imperial_units); -	int say_fraction() { +	public abstract int show_fraction(int width, boolean imperial_units); + +	public double parse(String s, boolean imperial_units) throws NumberFormatException { +		double v = Double.parseDouble(s); +		return inverse(v, imperial_units); +	} + +	public double parse(String s) throws NumberFormatException { +		return parse(s, AltosConvert.imperial_units); +	} + +	public double value(double v) { +		return value(v, AltosConvert.imperial_units); +	} +		 +	public double inverse(double v) { +		return inverse(v, AltosConvert.imperial_units); +	} + +	public String show_units() { +		return show_units(AltosConvert.imperial_units); +	} +		 +	public String say_units() { +		return say_units(AltosConvert.imperial_units); +	} +		 +	public int show_fraction(int width) { +		return show_fraction(width, AltosConvert.imperial_units); +	} +		 +	int say_fraction(boolean imperial_units) {  		return 0;  	} -	private String show_format(int width) { -		return String.format("%%%d.%df %s", width, show_fraction(width), show_units()); +	private String show_format(int width, boolean imperial_units) { +		return String.format("%%%d.%df %s", width, show_fraction(width, imperial_units), show_units(imperial_units)); +	} + +	private String say_format(boolean imperial_units) { +		return String.format("%%1.%df", say_fraction(imperial_units));  	} -	private String say_format() { -		return String.format("%%1.%df", say_fraction()); +	private String say_units_format(boolean imperial_units) { +		return String.format("%%1.%df %s", say_fraction(imperial_units), say_units(imperial_units));  	} -	private String say_units_format() { -		return String.format("%%1.%df %s", say_fraction(), say_units()); +	public String graph_format(int width, boolean imperial_units) { +		return String.format(String.format("%%%d.%df", width, show_fraction(width, imperial_units)), 0.0);  	}  	public String graph_format(int width) { -		return String.format(String.format("%%%d.%df", width, show_fraction(width)), 0.0); +		return graph_format(width, AltosConvert.imperial_units); +	} + +	public String show(int width, double v, boolean imperial_units) { +		return String.format(show_format(width, imperial_units), value(v, imperial_units));  	}  	public String show(int width, double v) { -		return String.format(show_format(width), value(v)); +		return show(width, v, AltosConvert.imperial_units); +	} + +	public String say(double v, boolean imperial_units) { +		return String.format(say_format(imperial_units), value(v, imperial_units));  	}  	public String say(double v) { -		return String.format(say_format(), value(v)); +		return say(v, AltosConvert.imperial_units); +	} + +	public String say_units(double v, boolean imperial_units) { +		return String.format(say_units_format(imperial_units), value(v, imperial_units));  	}  	public String say_units(double v) { -		return String.format(say_units_format(), value(v)); +		return say_units(v, AltosConvert.imperial_units);  	}  }
\ No newline at end of file  | 
