#include #include #include #include #include #include #include #include typedef CGAL::Simple_cartesian K; typedef CGAL::Search_traits_3 TreeTraits_3; typedef K::Point_3 Point_3; typedef CGAL::Euclidean_distance Distance; typedef CGAL::Sliding_midpoint Splitter; typedef CGAL::Orthogonal_k_neighbor_search Neighbor_search_3; typedef Neighbor_search_3::Tree Tree_3; typedef CGAL::Timer Timer; typedef std::vector Points; void read(Points& points, char* argv) { int d, n; double x,y,z; #if 0 std::ifstream data(argv); data >> d >> n; assert(d == 3); points.reserve(n); while(data >> p){ points.push_back(p); } data.close(); #else std::ifstream data(argv, std::ios::in | std::ios::binary); CGAL::set_binary_mode(data); CGAL::read(data,d); CGAL::read(data,n); points.reserve(n); for(int i=0; i < n; i++){ CGAL::read(data,x); CGAL::read(data,y); CGAL::read(data,z); points.push_back(Point_3(x,y,z)); } #endif data.close(); } int main(int argc,char *argv[]) { Points query_points_3, data_points_3; Point_3 p; Timer t; read(data_points_3, argv[1]); read(query_points_3, argv[2]); int runs = (argc>3) ? boost::lexical_cast(argv[3]) : 1; std::cerr << "runs = " << runs <4) ? boost::lexical_cast(argv[4]) : 10; std::cerr << "bucketsize = " << bucketsize <5) ? boost::lexical_cast(argv[5]) : 10; std::cerr << "k = " << NN_number <first; if(dump){ std::cerr << result[i].x()<<" "<1){ std::cerr << "average: " << sum/runs << " sec\n"; } std::cerr << "done\n"; return 0; }