Giriş
Şu satırı dahil ederiz.
Elimizde kendi point yapımız olsun.
Şu satırı dahil ederiz.
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/register/point.hpp>
#include <boost/geometry/geometries/register/box.hpp>
#include <boost/geometry/index/rtree.hpp>
Şu satırı dahil ederiz.namespace bg = boost::geometry;
namespace bgi = boost::geometry::index;
BOOST_GEOMETRY_REGISTER_BOXElimizde kendi point yapımız olsun.
struct my_point
{
float x, y;
my_point(float _x, float _y) : x(_x), y(_y) {}
};
Elimizde kendi box yapımız olsun.
struct my_box
{
my_point ll, ur;
my_box(float x1, float y1, float x2, float y2) : ll(x1,y1), ur(x2,y2) {}
};
Şöyle yaparız.
// Register the point type
BOOST_GEOMETRY_REGISTER_POINT_2D(my_point, float, cs::cartesian, x, y)
// Register the box type, also notifying that it is based on "my_point"
BOOST_GEOMETRY_REGISTER_BOX(my_box, my_point, ll, ur)
Daha sonra bir rtree kurarız. Şöyle yaparız.
bgi::rtree<std::pair<my_point, int>, bgi::dynamic_rstar>
rtree (pts, bgi::dynamic_rstar(pts.size()));
Kendi box sınıfımız ile sorgu yapmak için şöyle yaparız.
my_box box1(1,1,4,4);
std::vector<std::pair<my_point, int>> result;
rtree.query(bgi::covered_by(box1), std::back_inserter(result));
for(const auto &r: result){
std::cout << r.second << ' ' << '\n';
}
Hiç yorum yok:
Yorum Gönder