1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
package tim.prune.function.distance;
import tim.prune.I18nManager;
/** Class to convert a bearing into a language-dependent description like "N" or "SW" */
public class BearingDescriber
{
/** Concatenated cardinals like "NESW" */
private final String _singleCardinals;
/** Concatenated two-letter cardinals like "NESESWNW" */
private final String _doubleCardinals;
/** Constructor */
BearingDescriber()
{
final String cardinalNorth = I18nManager.getText("cardinal.n"),
cardinalEast = I18nManager.getText("cardinal.e"),
cardinalSouth = I18nManager.getText("cardinal.s"),
cardinalWest = I18nManager.getText("cardinal.w");
_singleCardinals = cardinalNorth + cardinalEast + cardinalSouth + cardinalWest;
_doubleCardinals = cardinalNorth + cardinalEast
+ cardinalSouth + cardinalEast
+ cardinalSouth + cardinalWest
+ cardinalNorth + cardinalWest;
}
/**
* @param bearing angle in degrees clockwise from north
* @return description using cardinals, like N, NE, E
*/
String describeBearing(double bearing)
{
final int index = (int) Math.floor((bearing + 22.5 + 360.0) / 45) % 8;
if ((index % 2) == 0) {
return _singleCardinals.substring(index / 2, index / 2 + 1);
}
return _doubleCardinals.substring(index - 1, index + 1);
}
}
|