Пример #1
0
int
main() {
  const size_t N = 1000;

  std::list<Point_d> points;
  points.push_back(Point_d(0,0));

  Tree tree;
  Random_points_iterator rpg;

  //inserting N points one-by-one, thus the use of "reserve" is recommended, and we use it
  tree.reserve(N);

  //to test wether the tree.capacity() function works properly.
  if( tree.capacity() < N)
  {
    std::cerr << "ERROR: Something is wrong with allocating points memory." << std::endl;
    return -1;
  }

  for(size_t i = 0; i < N; i++)
  {
    tree.insert(*rpg++);
  }

  std::list<Point_d> result;

  // define range query
  Point_d p(0.2, 0.2);
  Point_d q(0.7, 0.7);

  // Searching an exact range
  // using default value 0.0 for epsilon fuzziness parameter
  // Fuzzy_box exact_range(r); replaced by
  Fuzzy_iso_box exact_range(p,q);
  std::cout << "tree.search(..)" << std::endl;
  //tree.report_all_points(std::ostream_iterator<Point>(std::cout,"\n"));
  tree.search( std::back_inserter( result ), exact_range);

  std::cout << "The points in the box [0.2,0.7]x[0.2,0.7] are: " << std::endl;
  std::copy (result.begin(), result.end(), std::ostream_iterator<Point_d>(std::cout,"\n") );
  std::cout << std::endl;

  result.clear();
  // Searching a fuzzy range
  // using value 0.1 for fuzziness paramater
  Fuzzy_iso_box approximate_range(p, q, 0.1);
  tree.search(std::back_inserter( result ), approximate_range);
  std::cout << "The points in the fuzzy box [<0.1-0.3>,<0.6-0.9>]x[<0.1-0.3>,<0.6-0.9>] are: "
            << std::endl;
  std::copy (result.begin(), result.end(), std::ostream_iterator<Point_d>(std::cout,"\n") );
  std::cout << std::endl;
  return 0;
}
int main() {

  const int N=1000;

  // generator for random data points in the square ( (-1,-1), (1,1) )
  Random rnd(0);
  Random_points_iterator rpit(1.0, rnd);

  // Insert also the N points in the tree
  Tree tree(N_Random_points_iterator(rpit,0),
			      N_Random_points_iterator(N));

  // define exact circular range query
  Point center(0.2, 0.2);
  Fuzzy_circle exact_range(center, 0.2);

  std::list<Point> result;
  tree.search(std::back_inserter( result ), exact_range);

  std::cout << "\nPoints in cirle with center " << center << " and radius 0.2" << std::endl;

  std::list<Point>::iterator it;
  for (it=result.begin(); (it != result.end()); ++it) {
    std::cout << *it << std::endl;
  }

  result.clear();
  // approximate range searching using value 0.1 for fuzziness parameter
  Fuzzy_circle approximate_range(center, 0.2, 0.1);

  tree.search(std::back_inserter( result ), approximate_range);

  std::cout << "\n\nPoints in cirle with center " << center << " and fuzzy radius [0.1,0.3]" << std::endl;

  for (it=result.begin(); (it != result.end()); ++it) {
    std::cout << *it << std::endl;
  }
  std::cout << "\ndone" << std::endl;
  return 0;
}
Пример #3
0
int
main() {
  const int N = 1000;

  std::list<Point_d> points;
  points.push_back(Point_d(0,0));

  Tree tree;
  Random_points_iterator rpg;
  for(int i = 0; i < N; i++){
    tree.insert(*rpg++);
  }

  std::list<Point_d> result;

  // define range query
  Point_d p(0.2, 0.2);
  Point_d q(0.7, 0.7);

  // Searching an exact range
  // using default value 0.0 for epsilon fuzziness paramater
  Fuzzy_iso_box exact_range(p,q);
  tree.search( std::back_inserter( result ), exact_range);
  std::cout << "The points in the box [0.2, 0.7]^2 are: " << std::endl;
  std::copy (result.begin(), result.end(), std::ostream_iterator<Point_d>(std::cout,"\n") );
  std::cout << std::endl;

  result.clear();

  // Searching a fuzzy range
  // using value 0.1 for fuzziness paramater
  Fuzzy_iso_box approximate_range(p, q, 0.1);
  tree.search(std::back_inserter( result ), approximate_range);
  std::cout << "The points in the fuzzy box [[0.1, 0.3], [0.6, 0.9]]^2 are: " << std::endl;
  std::copy (result.begin(), result.end(), std::ostream_iterator<Point_d>(std::cout,"\n") );
  std::cout << std::endl;
  return 0;
}