private ICoordinate CircleMiddlefier(ICoordinate circle1, double radius1, ICoordinate circle2, double radius2)
        {
            var distance           = _euclidean.Distance(new[] { circle1.X, circle1.Z }, new[] { circle2.X, circle2.Z });
            var s                  = Math.Pow(radius1, 2) - Math.Pow(radius2, 2) + Math.Pow(distance, 2);
            var bf                 = s / (2 * distance);
            var verticalDistance   = circle2.Z - circle1.Z;
            var fHeight            = (verticalDistance * bf) / distance;
            var horizontalDistance = Math.Sqrt(Math.Pow(bf, 2) - Math.Pow(fHeight, 2));

            return(new Coordinate(circle1.X + horizontalDistance, circle1.Z + fHeight, 0));
        }
Exemple #2
0
        public void EuclideanDistance(double[] x, double[] y, double expected)
        {
            var result = Euclidean.Distance(x, y);

            result = Math.Truncate(result * 100) / 100;

            Assert.Equal(expected, result);
        }
Exemple #3
0
        public void EuclideanCase()
        {
            var result1 = Euclidean.Distance(new double[] { 0, 0 }, new double[] { 1, 0 });

            var result2 = Euclidean.Distance(new double[] { 0, 0 }, new double[] { 3, 2 });

            var result3 = Euclidean.Distance(new double[] { -7, -4, 3 }, new double[] { 17, 6, 2.5 });

            var result4 = Euclidean.Distance(new double[] { 5, 13, 17, 3, 25, 21, 7, 1 }, new double[] { 20, 26, 7, 5, 28, 3, 23, 10 });
        }
Exemple #4
0
        public bool GetAcceleration(ICoordinate currentCoordinate, DateTime timeStamp, out double acceleration)
        {
            if (GeneratedCoordinate.Count >= 2)
            {
                var historics     = GeneratedCoordinate.Skip(Math.Max(0, GeneratedCoordinate.Count() - 2)).ToArray();
                var historicOne   = historics[1];
                var historicTwo   = historics[0];
                var firstDistance = _euclid.Distance(new[] { currentCoordinate.X, currentCoordinate.Z },
                                                     new [] { historicOne.Coordinate.X, historicOne.Coordinate.Z });
                var secondDistance = _euclid.Distance(new[] { historicOne.Coordinate.X, historicOne.Coordinate.Z },
                                                      new [] { historicTwo.Coordinate.X, historicTwo.Coordinate.Z });

                var speed1 = firstDistance / timeStamp.Subtract(historicOne.TimeStamp).TotalMilliseconds * 1000;

                var speed2 = secondDistance / historicOne.TimeStamp.Subtract(historicTwo.TimeStamp).TotalMilliseconds * 1000;

                acceleration = speed1 - speed2;
                return(true);
            }

            acceleration = 0;
            return(false);
        }
Exemple #5
0
 public void EuclideanDistance_Exception_y_Null()
 {
     double[] x = new double[] { 0, 1, 2, 3, 4, 5 };
     double[] y = null;
     Assert.Throws <ArgumentNullException>(() => Euclidean.Distance(x, y));
 }