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)); }
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); }
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 }); }
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); }
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)); }