Ejemplo n.º 1
0
        public void BothVersionOfKdTree_ReturnsTheSameSetOfCoordinates_GivenASetOfPoints()
        {
            var pointsNeeded = 100;

            var originalKdTree = new KDTree <double, Coordinate>(2, CoordinatesAsDoubleArray, ArrayOfCoordinates, KdTreeHelper.L2Norm_Squared_Double);

            var coordinateKdTree = new KDTreeCoordinate <Coordinate>(2, ArrayOfCoordinates, KdTreeHelper.L2Norm_Squared_Coordinate);

            var pointsFromOriginal = originalKdTree.NearestNeighborsLinear(CoordinatesAsDoubleArray.First(), pointsNeeded);

            var pointsFromModified = coordinateKdTree.NearestNeighborsLinear(ArrayOfCoordinates.First(), pointsNeeded);

            pointsFromOriginal.SequenceEqual(pointsFromModified).Should().BeTrue();
        }
Ejemplo n.º 2
0
        public void NearestNeighborsRadial_ReturnsTheClosestPoints_EvenIfTheRadiusHasMorePointsInItsSroundingThanDefined()
        {
            var pointsNeeded = 4;
            var center       = ArrayOfCoordinates.First();
            var coordinatesSortedByDistanceToCenter = ArrayOfCoordinates.OrderBy(c => c.Distance(center)).ToList();

            var kdTree = new KDTree <double, Coordinate>(2, CoordinatesAsDoubleArray, ArrayOfCoordinates, KdTreeHelper.L2Norm_Squared_Double);

            var searchedPoints = kdTree.NearestNeighborsRadial(new[] { center.Latitude, center.Longitude }, double.MaxValue, pointsNeeded);

            searchedPoints[0].Should().Be(coordinatesSortedByDistanceToCenter[0]);
            searchedPoints[1].Should().Be(coordinatesSortedByDistanceToCenter[1]);
            searchedPoints[2].Should().Be(coordinatesSortedByDistanceToCenter[2]);
            searchedPoints[3].Should().Be(coordinatesSortedByDistanceToCenter[3]);
        }