@ -4,6 +4,8 @@ package seng302.RaceEventMessages;
* Created by f123 on 21 - Apr - 17.
* /
import seng302.Constants ;
/ * *
* Represents the information in a boat location message ( AC streaming spec : 4.9 ) .
* /
@ -442,4 +444,112 @@ public class BoatLocationMessage
return angleShort ;
}
/ * *
* Converts a double representing the speed of a boat in knots to an int in millimeters per second , as required by the streaming spec format .
* @param speed Speed in knots , stored as a double .
* @return Speed in millimeters per second , stored as an int ( using only the two least significant bytes ) .
* /
public static int convertBoatSpeedDoubleToInt ( double speed )
{
//Calculate meters per second.
double metersPerSecond = speed * Constants . KnotsToMetersPerSecondConversionFactor ;
//Calculate millimeters per second.
double millimetersPerSecond = metersPerSecond * 1000.0 ;
//Convert to an int.
int millimetersPerSecondInt = ( int ) Math . round ( millimetersPerSecond ) ;
return millimetersPerSecondInt ;
}
/ * *
* Converts an int representing the speed of a boat in millimeters per second to a double in knots , as required by the streaming spec format .
* @param speed Speed in millimeters per second , stored as an int .
* @return Speed in knots , stored as a double .
* /
public static double convertBoatSpeedIntToDouble ( int speed )
{
//Calculate meters per second.
double metersPerSecond = speed / 1000.0 ;
//Calculate knots.
double knots = metersPerSecond / Constants . KnotsToMetersPerSecondConversionFactor ;
return knots ;
}
@Override
public String toString ( )
{
StringBuilder builder = new StringBuilder ( ) ;
builder . append ( "Message version number: " ) ;
builder . append ( this . getMessageVersionNumber ( ) ) ;
builder . append ( "\nTime: " ) ;
builder . append ( this . getTime ( ) ) ;
builder . append ( "\nSource ID: " ) ;
builder . append ( this . getSourceID ( ) ) ;
builder . append ( "\nSequence number: " ) ;
builder . append ( this . getSequenceNumber ( ) ) ;
builder . append ( "\nDevice type: " ) ;
builder . append ( this . getDeviceType ( ) ) ;
builder . append ( "\nLatitude: " ) ;
builder . append ( this . getLatitude ( ) ) ;
builder . append ( "\nLongitude: " ) ;
builder . append ( this . getLongitude ( ) ) ;
builder . append ( "\nAltitude: " ) ;
builder . append ( this . getAltitude ( ) ) ;
builder . append ( "\nHeading: " ) ;
builder . append ( this . getHeading ( ) ) ;
builder . append ( "\nPitch: " ) ;
builder . append ( this . getPitch ( ) ) ;
builder . append ( "\nRoll: " ) ;
builder . append ( this . getRoll ( ) ) ;
builder . append ( "\nBoat speed (mm/sec): " ) ;
builder . append ( this . getBoatSpeed ( ) ) ;
builder . append ( "\nBoat COG: " ) ;
builder . append ( this . getBoatCOG ( ) ) ;
builder . append ( "\nBoat SOG: " ) ;
builder . append ( this . getBoatSOG ( ) ) ;
builder . append ( "\nApparent wind speed: " ) ;
builder . append ( this . getApparentWindSpeed ( ) ) ;
builder . append ( "\nApparent wind angle: " ) ;
builder . append ( this . getApparentWindAngle ( ) ) ;
builder . append ( "\nTrue wind speed: " ) ;
builder . append ( this . getTrueWindSpeed ( ) ) ;
builder . append ( "\nTrue wind angle: " ) ;
builder . append ( this . getTrueWindAngle ( ) ) ;
builder . append ( "\nCurrent drift: " ) ;
builder . append ( this . getCurrentDrift ( ) ) ;
builder . append ( "\nCurrent set: " ) ;
builder . append ( this . getCurrentSet ( ) ) ;
builder . append ( "\nRudder angle: " ) ;
builder . append ( this . getRudderAngle ( ) ) ;
return builder . toString ( ) ;
}
}