diff --git a/Spatial_searching/benchmark/Spatial_searching/Compare_ANN_STANN_CGAL.cpp b/Spatial_searching/benchmark/Spatial_searching/Compare_ANN_STANN_CGAL.cpp index c56304b40cc..65f641bc989 100644 --- a/Spatial_searching/benchmark/Spatial_searching/Compare_ANN_STANN_CGAL.cpp +++ b/Spatial_searching/benchmark/Spatial_searching/Compare_ANN_STANN_CGAL.cpp @@ -11,11 +11,13 @@ #include #include -#include - #include #include +#include + + + typedef CGAL::Simple_cartesian Kernel; typedef Kernel::Point_3 Point_3; typedef CGAL::Random_points_in_cube_3 Random_points_iterator; diff --git a/Spatial_searching/benchmark/Spatial_searching/Nearest_neighbor_searching.cpp b/Spatial_searching/benchmark/Spatial_searching/Nearest_neighbor_searching.cpp index 9a9696cdce7..727d750fbfa 100644 --- a/Spatial_searching/benchmark/Spatial_searching/Nearest_neighbor_searching.cpp +++ b/Spatial_searching/benchmark/Spatial_searching/Nearest_neighbor_searching.cpp @@ -32,7 +32,7 @@ int main() { std::cout << "Enter input file name containing data points: \n" ; std::cin >> filename_data_points; - ifstream in_data_points, in_query_points; + std::ifstream in_data_points, in_query_points; int data_point_number; int query_point_number; int N, N_data_points, N_query_points; // dimension of input data @@ -59,20 +59,20 @@ int main() { point_list query_points, data_points; for (int i = 0; i < query_point_number; i++) { - double p[N]; + std::vector p(N); for (int j = 0; j < N; j++) { in_query_points >> p[j]; } - Point_d Pnt(N,p,p+N); + Point_d Pnt(N,p.begin(),p.end()); query_points.push_back(Pnt); }; for (int i = 0; i < data_point_number; i++) { - double p[N]; + std::vector p(N); for (int j = 0; j < N; j++) { in_data_points >> p[j]; } - Point_d Pnt(N,p,p+N); + Point_d Pnt(N,p.begin(),p.end()); data_points.push_back(Pnt); }; diff --git a/Spatial_searching/benchmark/Spatial_searching/Nearest_neighbor_searching_2D.cpp b/Spatial_searching/benchmark/Spatial_searching/Nearest_neighbor_searching_2D.cpp index 85698bb7646..1740978f28c 100644 --- a/Spatial_searching/benchmark/Spatial_searching/Nearest_neighbor_searching_2D.cpp +++ b/Spatial_searching/benchmark/Spatial_searching/Nearest_neighbor_searching_2D.cpp @@ -35,7 +35,7 @@ int main() { std::cout << "Enter input file name containing data points: \n" ; std::cin >> filename_data_points; - ifstream in_data_points, in_query_points; + std::ifstream in_data_points, in_query_points; int data_point_number; int query_point_number; int N, N_data_points, N_query_points; // dimension of input data @@ -62,7 +62,7 @@ int main() { point_list query_points, data_points; for (int i = 0; i < query_point_number; i++) { - double p[N]; + std::vector p(N); for (int j = 0; j < N; j++) { in_query_points >> p[j]; } @@ -71,7 +71,7 @@ int main() { }; for (int i = 0; i < data_point_number; i++) { - double p[N]; + std::vector p(N); for (int j = 0; j < N; j++) { in_data_points >> p[j]; } diff --git a/Spatial_searching/benchmark/Spatial_searching/Nearest_neighbor_searching_2D_user_defined.cpp b/Spatial_searching/benchmark/Spatial_searching/Nearest_neighbor_searching_2D_user_defined.cpp index ac7ae22640a..8dde7d4a552 100644 --- a/Spatial_searching/benchmark/Spatial_searching/Nearest_neighbor_searching_2D_user_defined.cpp +++ b/Spatial_searching/benchmark/Spatial_searching/Nearest_neighbor_searching_2D_user_defined.cpp @@ -40,7 +40,7 @@ int main() { std::cout << "Enter input file name containing data points: \n" ; std::cin >> filename_data_points; - ifstream in_data_points, in_query_points; + std::ifstream in_data_points, in_query_points; int data_point_number; int query_point_number; int N, N_data_points, N_query_points; // dimension of input data @@ -67,7 +67,7 @@ int main() { point_list query_points, data_points; for (int i = 0; i < query_point_number; i++) { - double p[N]; + std::vector p(N); for (int j = 0; j < N; j++) { in_query_points >> p[j]; } @@ -76,7 +76,7 @@ int main() { }; for (int i = 0; i < data_point_number; i++) { - double p[N]; + std::vector p(N); for (int j = 0; j < N; j++) { in_data_points >> p[j]; } @@ -90,7 +90,6 @@ int main() { Tree tree(data_points.begin(), data_points.end(), sliding_midpoint); t.stop(); - std::cout << "bucket size is " << tree.bucket_size() << std::endl; data_points.clear(); std::cout << "created binary search tree containing" << std::endl diff --git a/Spatial_searching/benchmark/Spatial_searching/Split_data.cpp b/Spatial_searching/benchmark/Spatial_searching/Split_data.cpp index 53aee8058cb..0b6f05f596c 100644 --- a/Spatial_searching/benchmark/Spatial_searching/Split_data.cpp +++ b/Spatial_searching/benchmark/Spatial_searching/Split_data.cpp @@ -29,8 +29,8 @@ int main() { std::cout << "Enter output file name containing data points: \n" ; std::cin >> filename_out_data_points; - ifstream in; - ofstream out_query, out_data; + std::ifstream in; + std::ofstream out_query, out_data; int data_point_number, query_point_number; @@ -52,7 +52,7 @@ int main() { std::cout << "data point number = " << data_point_number << std::endl; std::cout << "query point number = " << query_point_number << std::endl; - int query_point[point_number]; + std::vector query_point(point_number); for (int ii = 0; ii < point_number; ii++) query_point[ii]=0; @@ -68,11 +68,11 @@ int main() { for (int i = 0; i < point_number; i++) { - double p[N]; + std::vector p(N); for (int j = 0; j < N; j++) { in >> p[j]; } - Point_d Pnt(N,p,p+N); + Point_d Pnt(N,p.begin(),p.end()); all_points.push_back(Pnt); }; diff --git a/Spatial_searching/benchmark/Spatial_searching/nn3nanoflan.cpp b/Spatial_searching/benchmark/Spatial_searching/nn3nanoflan.cpp index 4f70137831a..ef72ab03638 100755 --- a/Spatial_searching/benchmark/Spatial_searching/nn3nanoflan.cpp +++ b/Spatial_searching/benchmark/Spatial_searching/nn3nanoflan.cpp @@ -156,15 +156,10 @@ void kdtree_demo(int argc, char** argv) if(dump) std::cerr < @@ -219,14 +224,15 @@ generate empty cells. \section Spatial_searchingExample Example Programs -We give six examples. The first example illustrates k nearest neighbor +We give seven examples. The first example illustrates k nearest neighbor searching, and the second example incremental neighbor searching. The third is an example of approximate furthest neighbor searching using a `d`-dimensional iso-rectangle as an query object. Approximate range searching is illustrated by the fourth example. The fifth example illustrates k neighbor searching for a user defined point -class. The last example shows how to choose another splitting rule in the -`k-d` tree that is used as search tree. +class. The sixth example shows how to choose another splitting rule in the +`k-d` tree that is used as search tree. The last example shows two worst-case +scenarios for different splitter types. \subsection Spatial_searchingExampleforKNeighborSearching Example for K Neighbor Searching @@ -333,6 +339,17 @@ splitting rule, needed to set the maximal allowed bucket size. \cgalExample{Spatial_searching/using_fair_splitting_rule.cpp} +\subsection Spatial_searchingExampleforWorstCaseScenarios Example for worst-case scenarios for different splitters + +This example program has two 2-dimensional data sets: The first one containing +colinear points with exponential increasing distances and the second +one with colinear points in dimension 1 and one point with a distance +exceeding the spread of the other points in distance 2. These are +the worst cases for the midpoint/median rules and can also occur in +higher dimensions. + +\cgalExample{Spatial_searching/splitter_worst_cases.cpp} + \section Spatial_searchingSoftware Software Design \subsection Kd_tree_subsection The k-d tree diff --git a/Spatial_searching/doc/Spatial_searching/examples.txt b/Spatial_searching/doc/Spatial_searching/examples.txt index cbec52607f4..e41f002a870 100644 --- a/Spatial_searching/doc/Spatial_searching/examples.txt +++ b/Spatial_searching/doc/Spatial_searching/examples.txt @@ -14,4 +14,5 @@ \example Spatial_searching/user_defined_point_and_distance.cpp \example Spatial_searching/using_fair_splitting_rule.cpp \example Spatial_searching/weighted_Minkowski_distance.cpp +\example Spatial_searching/splitter_worst_cases.cpp */