void pointQueries_ND(int items){ std::vector< Rect<size> > rectangles; std::vector< Rect<size> > queries; unsigned int edge_size = (unsigned int)ceil(pow((double)items, 1.0 / (double)size)); int no_iterations = std::max(max_elements / items, 10); generateRectangles(items, edge_size, rectangles); RTree<int, unsigned int, size, float> tree; for (size_t i = 0; i < rectangles.size(); ++i){ tree.Insert(rectangles[i].min, rectangles[i].max, i); std::vector<unsigned int> min(size, i*tile_size+1); std::vector<unsigned int> max(size, i*tile_size+1); Rect<size> pointQuery(min, max); queries.push_back(pointQuery); } auto begin = std::chrono::high_resolution_clock::now(); for (int i = 0; i < no_iterations; i++){ for (size_t j = 0; j < queries.size(); j++){ tree.Search(queries[j].min, queries[j].max, MySearchCallback, NULL); } } auto end = std::chrono::high_resolution_clock::now(); of << "Running " << queries.size() << " point queries " << size << "D items:" << (double)std::chrono::duration_cast<std::chrono::microseconds>(end - begin).count() / (double)no_iterations << "ns" << std::endl; }
void cpSpaceStaticShapePointQuery(cpSpace *space, cpVect point, cpSpacePointQueryFunc func, void *data) { pointQuery(space->staticShapes, point, func, data); }