You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
3.4 KiB
108 lines
3.4 KiB
package network.Utils;
|
|
|
|
import shared.model.Constants;
|
|
|
|
/**
|
|
* Contains various unit conversion for encoding/decoding messages.
|
|
* Our program uses the "unpacked" units, and the over-the-wire format uses "packed" units (e.g., degrees stored as ints).
|
|
*/
|
|
public class AC35UnitConverter {
|
|
|
|
|
|
/**
|
|
* Converts a packed GPSCoordinate (latitude or longitude) into the unpacked unit.
|
|
* @param value Packed lat/long value.
|
|
* @return Unpacked lat/long angle, in degrees.
|
|
*/
|
|
public static double unpackGPS(int value) {
|
|
return (double) value * 180.0 / 2147483648.0;//2^31 = 2147483648
|
|
}
|
|
|
|
/**
|
|
* Converts a latitude or longitude angle into a packed unit.
|
|
* @param value The lat/long angle, in degrees, to convert.
|
|
* @return The packed value.
|
|
*/
|
|
public static int packGPS(double value) {
|
|
return (int) (value * 2147483648.0 / 180.0);//2^31 = 2147483648
|
|
}
|
|
|
|
|
|
/**
|
|
* Unpacks a heading from an int to an angle in degrees (this is a bearing).
|
|
* @param value The packed value to unpack.
|
|
* @return The unpacked value in degrees.
|
|
*/
|
|
public static double unpackHeading(int value) {
|
|
return (value * 360.0 / 65536.0);//2^15
|
|
}
|
|
|
|
/**
|
|
* Packs a heading (this is a bearing), in degrees, to a packed int value.
|
|
* @param value The heading in degrees.
|
|
* @return The packed value.
|
|
*/
|
|
public static int packHeading(double value) {
|
|
return (int) (value / 360.0 * 65536.0);//2^15
|
|
}
|
|
|
|
|
|
/**
|
|
* Unpacks a true wind angle from a short to an angle in degrees (this is an azimuth).
|
|
* @param value The packed value to unpack.
|
|
* @return The unpacked value in degrees.
|
|
*/
|
|
public static double unpackTrueWindAngle(short value) {
|
|
return (value * 180.0 / 32768.0);//-2^15 to 2^15
|
|
}
|
|
|
|
/**
|
|
* Packs a true wind angle (this is an azimuth) from an angle in degrees to a packed short value.
|
|
* @param value The unpacked value in degrees.
|
|
* @return The packed value.
|
|
*/
|
|
public static short packTrueWindAngle(double value) {
|
|
return (short) (value / 180.0 * 32768.0);//-2^15 to 2^15
|
|
}
|
|
|
|
|
|
/**
|
|
* Unpacks a speed, in millimeters per second, to a double, in knots.
|
|
* @param millimetersPerSec Speed in millimeters per second.
|
|
* @return Speed in knots.
|
|
*/
|
|
public static double unpackMMperSecToKnots(int millimetersPerSec) {
|
|
return (millimetersPerSec / Constants.KnotsToMMPerSecond);
|
|
}
|
|
|
|
/**
|
|
* Packs a speed, in knots, into an int, in millimeters per second.
|
|
* @param speedKnots Speed in knots.
|
|
* @return Speed in millimeters per second.
|
|
*/
|
|
public static int packKnotsToMMperSec(double speedKnots) {
|
|
return (int) (speedKnots * Constants.KnotsToMMPerSecond);
|
|
}
|
|
|
|
|
|
/**
|
|
* Packs an average wind period, in milliseconds, into an int, in tenths of a second.
|
|
* @param periodMilliseconds Period in milliseconds.
|
|
* @return Period in tenths of a second.
|
|
*/
|
|
public static int packAverageWindPeriod(long periodMilliseconds) {
|
|
return (int) (periodMilliseconds / 100);
|
|
}
|
|
|
|
/**
|
|
* Unpacks an average wind period, in tenths of a second, into an long, in milliseconds.
|
|
* @param periodTenthsOfSecond Period in tenths of a second.
|
|
* @return Period in milliseconds
|
|
*/
|
|
public static long unpackAverageWindPeriod(int periodTenthsOfSecond) {
|
|
return (periodTenthsOfSecond * 100);
|
|
}
|
|
|
|
|
|
}
|