コード例 #1
0
 public ATMTransponderData(string tag, IATMCoordinate coordinate, string timestamp, int horizontalVelocity = 0, int compassCourse = 0)
 {
     Tag = tag;
     Coordinate = coordinate;
     Timestamp = timestamp;
     HorizontalVelocity = horizontalVelocity;
     CompassCourse = compassCourse;
 }
コード例 #2
0
 public ATMTransponderData(string tag, IATMCoordinate coordinate, string timestamp, int horizontalVelocity = 0, int compassCourse = 0)
 {
     Tag                = tag;
     Coordinate         = coordinate;
     Timestamp          = timestamp;
     HorizontalVelocity = horizontalVelocity;
     CompassCourse      = compassCourse;
 }
コード例 #3
0
        /// <summary>
        /// Take two point and return angle of it.
        /// 0 in north
        /// 270 in east
        /// </summary>
        /// <param name="oldCoordinate"></param>
        /// <param name="newCoordinate"></param>
        /// <returns></returns>
        public double Convert(IATMCoordinate oldCoordinate, IATMCoordinate newCoordinate)
        {
            // check for null reference
            if (oldCoordinate == null || newCoordinate == null) throw new ArgumentNullException(oldCoordinate == null ? nameof(oldCoordinate) : nameof(newCoordinate), nameof(oldCoordinate) + " or " + nameof(newCoordinate) + " are null");

            // calculate teta
            var theta = Math.Atan2(oldCoordinate.Y - newCoordinate.Y, oldCoordinate.X - newCoordinate.X);
            // rotate half pi degree
            theta += Math.PI/2.0;
            //convert to degree
            var angle = theta*(180/Math.PI);
            if (angle < 0)
                angle += 360;
            // convert to 2 float precision
            return Math.Round(angle, 2);
        }
        /// <summary>
        /// Convert velocity m/s
        /// </summary>
        /// <param name="oldCoordinate"></param>
        /// <param name="newCoordinate"></param>
        /// <param name="oldTimestamp"></param>
        /// <param name="newTimestamp"></param>
        /// <returns></returns>
        public double Convert(IATMCoordinate oldCoordinate, IATMCoordinate newCoordinate, string oldTimestamp, string newTimestamp)
        {
            // check for null reference
            if (oldCoordinate == null || newCoordinate == null || oldTimestamp == null || newTimestamp == null) throw new ArgumentNullException(nameof(newCoordinate) +", " + nameof(oldCoordinate) + ", " + nameof(oldTimestamp) + ", " + nameof(newTimestamp) + " are null");

            // calculate tha distance between points in meter
            var velocity =
                Math.Sqrt(Math.Pow((newCoordinate.X - oldCoordinate.X), 2) +
                          Math.Pow((newCoordinate.Y - oldCoordinate.Y), 2));
            // confirm that time difference is not negativ or 0
            if((double.Parse(newTimestamp, CultureInfo.CurrentCulture.NumberFormat) - double.Parse(oldTimestamp, CultureInfo.CurrentCulture.NumberFormat) <= 0) || Math.Abs(velocity) < 3)
                return 0;
            // calculate velocity
            velocity = velocity/
                       ((double.Parse(newTimestamp, CultureInfo.CurrentCulture.NumberFormat) - double.Parse(oldTimestamp, CultureInfo.CurrentCulture.NumberFormat))/1000);
            // convert 2 precision float and return it
            return Math.Round(velocity, 2);
        }
コード例 #5
0
        /// <summary>
        /// Take two point and return angle of it.
        /// 0 in north
        /// 270 in east
        /// </summary>
        /// <param name="oldCoordinate"></param>
        /// <param name="newCoordinate"></param>
        /// <returns></returns>
        public double Convert(IATMCoordinate oldCoordinate, IATMCoordinate newCoordinate)
        {
            // check for null reference
            if (oldCoordinate == null || newCoordinate == null)
            {
                throw new ArgumentNullException(oldCoordinate == null ? nameof(oldCoordinate) : nameof(newCoordinate), nameof(oldCoordinate) + " or " + nameof(newCoordinate) + " are null");
            }

            // calculate teta
            var theta = Math.Atan2(oldCoordinate.Y - newCoordinate.Y, oldCoordinate.X - newCoordinate.X);

            // rotate half pi degree
            theta += Math.PI / 2.0;
            //convert to degree
            var angle = theta * (180 / Math.PI);

            if (angle < 0)
            {
                angle += 360;
            }
            // convert to 2 float precision
            return(Math.Round(angle, 2));
        }
        /// <summary>
        /// Convert velocity m/s
        /// </summary>
        /// <param name="oldCoordinate"></param>
        /// <param name="newCoordinate"></param>
        /// <param name="oldTimestamp"></param>
        /// <param name="newTimestamp"></param>
        /// <returns></returns>
        public double Convert(IATMCoordinate oldCoordinate, IATMCoordinate newCoordinate, string oldTimestamp, string newTimestamp)
        {
            // check for null reference
            if (oldCoordinate == null || newCoordinate == null || oldTimestamp == null || newTimestamp == null)
            {
                throw new ArgumentNullException(nameof(newCoordinate) + ", " + nameof(oldCoordinate) + ", " + nameof(oldTimestamp) + ", " + nameof(newTimestamp) + " are null");
            }

            // calculate tha distance between points in meter
            var velocity =
                Math.Sqrt(Math.Pow((newCoordinate.X - oldCoordinate.X), 2) +
                          Math.Pow((newCoordinate.Y - oldCoordinate.Y), 2));

            // confirm that time difference is not negativ or 0
            if ((double.Parse(newTimestamp, CultureInfo.CurrentCulture.NumberFormat) - double.Parse(oldTimestamp, CultureInfo.CurrentCulture.NumberFormat) <= 0) || Math.Abs(velocity) < 3)
            {
                return(0);
            }
            // calculate velocity
            velocity = velocity /
                       ((double.Parse(newTimestamp, CultureInfo.CurrentCulture.NumberFormat) - double.Parse(oldTimestamp, CultureInfo.CurrentCulture.NumberFormat)) / 1000);
            // convert 2 precision float and return it
            return(Math.Round(velocity, 2));
        }
 public void Setup()
 {
     _uut = new ATMCoordinate(12543, 85465, 659);
 }
 public void Setup()
 {
     _uut           = new ATMAngleConverter();
     _atmCoordinate = new ATMCoordinate(522, 375, 5000);
 }
 public void Setup()
 {
     _uut = new ATMAngleConverter();
     _atmCoordinate = new ATMCoordinate(522, 375, 5000);
 }
コード例 #10
0
 public void Setup()
 {
     _uut = new ATMCoordinate(12543, 85465, 659);
 }
コード例 #11
0
 public void Setup()
 {
     _atmCoordinate = Substitute.For <IATMCoordinate>();
     _uut           = new ATMTransponderData("F22", _atmCoordinate, "20150512145712542", 25, 54);
 }