37 #ifndef _PCL_TEST_GPU_OCTREE_DATAGEN_ 38 #define _PCL_TEST_GPU_OCTREE_DATAGEN_ 43 #include <Eigen/StdVector> 47 #if defined (_WIN32) || defined(_WIN64) 70 DataGenerator() : data_size(871000), tests_num(10000), cube_size(1024.f)
72 max_radius = cube_size/15.f;
73 shared_radius = cube_size/20.f;
80 points.resize(data_size);
83 points[i].x = ((float)rand())/RAND_MAX * cube_size;
84 points[i].y = ((float)rand())/RAND_MAX * cube_size;
85 points[i].z = ((float)rand())/RAND_MAX * cube_size;
89 queries.resize(tests_num);
90 radiuses.resize(tests_num);
93 queries[i].x = ((float)rand())/RAND_MAX * cube_size;
94 queries[i].y = ((float)rand())/RAND_MAX * cube_size;
95 queries[i].z = ((float)rand())/RAND_MAX * cube_size;
96 radiuses[i] = ((float)rand())/RAND_MAX * max_radius;
99 for(
size_t i = 0; i < tests_num/2; ++i)
100 indices.push_back(i*2);
106 std::cout <<
"BruteForceSearch";
108 int value100 = std::min<int>(
tests_num, 50);
109 int step = tests_num/value100;
111 bfresutls.resize(tests_num);
114 if (log && i % step == 0)
120 std::vector<int>& curr_res = bfresutls[i];
123 float query_radius = radius > 0 ? radius : radiuses[i];
124 const PointType& query = queries[i];
126 for(
size_t ind = 0; ind < points.size(); ++ind)
128 const PointType& point = points[ind];
130 float dx = query.x - point.x;
131 float dy = query.y - point.y;
132 float dz = query.z - point.z;
134 if (dx*dx + dy*dy + dz*dz < query_radius * query_radius)
135 curr_res.push_back(ind);
138 std::sort(curr_res.begin(), curr_res.end());
141 std::cout <<
"Done" << std::endl;
146 std::cout <<
"Points number = " << data_size << std::endl;
147 std::cout <<
"Queries number = " << tests_num << std::endl;
148 std::cout <<
"Cube size = " << cube_size << std::endl;
149 std::cout <<
"Max radius = " << max_radius << std::endl;
150 std::cout <<
"Shared radius = " << shared_radius << std::endl;
153 template<
typename Dst>
void bruteForceSearch(bool log=false, float radius=-1.f)
std::vector< PointType > queries
std::vector< float > radiuses
A point structure representing Euclidean xyz coordinates.
pcl::gpu::Octree::PointType PointType
std::vector< int > indices
Dst operator()(const PointType &src) const
std::vector< PointType > points
std::vector< std::vector< int > > bfresutls