38 #ifndef _PCL_TEST_GPU_OCTREE_DATAGEN_
39 #define _PCL_TEST_GPU_OCTREE_DATAGEN_
44 #include <Eigen/StdVector>
48 #if defined (_WIN32) || defined(_WIN64)
78 DataGenerator() : data_size(871000), tests_num(10000), cube_size(1024.f)
80 max_radius = cube_size/15.f;
81 shared_radius = cube_size/20.f;
88 points.resize(data_size);
89 for(std::size_t i = 0; i <
data_size; ++i)
91 points[i].x = ((float)rand())/RAND_MAX * cube_size;
92 points[i].y = ((float)rand())/RAND_MAX * cube_size;
93 points[i].z = ((float)rand())/RAND_MAX * cube_size;
97 queries.resize(tests_num);
98 radiuses.resize(tests_num);
99 for (std::size_t i = 0; i <
tests_num; ++i)
101 queries[i].x = ((float)rand())/RAND_MAX * cube_size;
102 queries[i].y = ((float)rand())/RAND_MAX * cube_size;
103 queries[i].z = ((float)rand())/RAND_MAX * cube_size;
104 radiuses[i] = ((float)rand())/RAND_MAX * max_radius;
107 for(std::size_t i = 0; i < tests_num/2; ++i)
108 indices.push_back(i*2);
114 std::cout <<
"BruteForceSearch";
116 int value100 = std::min<int>(
tests_num, 50);
117 int step = tests_num/value100;
119 bfresutls.resize(tests_num);
120 for(std::size_t i = 0; i <
tests_num; ++i)
122 if (log && i % step == 0)
128 std::vector<int>& curr_res = bfresutls[i];
131 float query_radius = radius > 0 ? radius : radiuses[i];
134 for(std::size_t ind = 0; ind < points.size(); ++ind)
138 float dx = query.x - point.x;
139 float dy = query.y - point.y;
140 float dz = query.z - point.z;
142 if (dx*dx + dy*dy + dz*dz < query_radius * query_radius)
143 curr_res.push_back(ind);
146 std::sort(curr_res.begin(), curr_res.end());
149 std::cout <<
"Done" << std::endl;
154 std::cout <<
"Points number = " << data_size << std::endl;
155 std::cout <<
"Queries number = " << tests_num << std::endl;
156 std::cout <<
"Cube size = " << cube_size << std::endl;
157 std::cout <<
"Max radius = " << max_radius << std::endl;
158 std::cout <<
"Shared radius = " << shared_radius << std::endl;
161 template<
typename Dst>
void bruteForceSearch(bool log=false, float radius=-1.f)
std::vector< int > indices
A point structure representing Euclidean xyz coordinates.
std::vector< PointType > queries
pcl::PointXYZ PointType
Point typwe supported.
std::vector< std::vector< int > > bfresutls
Dst operator()(const PointType &src) const
std::vector< PointType > points
std::vector< float > radiuses