10 Nisan 2017 Pazartesi

geometry BOOST_GEOMETRY_REGISTER_BOX

Giriş
Ş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_BOX
Elimizde 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