Я использую реализацию Kd-дерева в CGAL вместе с сферическими нечеткими объектами в качестве объектов запроса, чтобы получить точки, заключенные в сферу радиусом r_max
с центром в точке.Вот этот минимальный рабочий пример:
#include <CGAL/Simple_cartesian.h>
#include <CGAL/Kd_tree.h>
#include <CGAL/Search_traits_2.h>
#include <CGAL/Fuzzy_sphere.h>
#include <iostream>
#include <fstream>
typedef CGAL::Simple_cartesian<double> K;
typedef K::Point_2 Point;
typedef CGAL::Search_traits_2<K> TreeTraits;
typedef CGAL::Kd_tree<TreeTraits> Kd_tree;
typedef Kd_tree::Tree Tree;
typedef CGAL::Fuzzy_sphere<TreeTraits> Sphere;
int main(int argc, char* argv[])
{
double r_max;
Tree tree;
/* ... fill the tree with points, set the value of r_max ...*/
// Report indices for the neighbors within a sphere
unsigned int idc_query = tree.size()/2; // test index
Tree::iterator kti = idc_query + tree.begin();
Sphere s_query(*kti, r_max);
// Print points
tree.search(std::ostream_iterator<Point>(std::cout, "\n"), s_query);
return 0;
}
Я взял и адаптировал строку под комментарием «Точки печати» из файла near_neighbor_searching.cpp в папке Spatial_searching примеров CGAL (моя версия 3.9).
Вопрос в следующем: есть ли способ установить для меня другой OutputIterator
(вместо std::ostream_iterator
), который хранит указатель / итератор / дескриптор для точек, полученных в результате поиска в контейнере сортов?, вместо с координатами точек, напечатанными на стандартный вывод?Спасибо.