2 Ocak 2018 Salı

geometry BOOST_GEOMETRY_REGISTER_POINT_2D

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_POINT_2D
Örnek
Elimizde kendi point yapımız olsun.
struct my_point
{
  float x, y;
  my_point(float _x, float _y) : x(_x), y(_y) {}
};
Şöyle yaparız.
// Register the point type
BOOST_GEOMETRY_REGISTER_POINT_2D(my_point, float, cs::cartesian, x, y)
Noktaları bir vector'e doldururuz. Şöyle yaparız.
std::vector<std::pair<my_point, int>> pts;
pts.emplace_back(std::make_pair(my_point(2,2), 5));
pts.emplace_back(std::make_pair(my_point(3,3), 1));
pts.emplace_back(std::make_pair(my_point(4,5), 3));
pts.emplace_back(std::make_pair(my_point(4,4), 12));
pts.emplace_back(std::make_pair(my_point(1,2), 50));
Daha sonra vector ile bir rtree kurarız. Şöyle yaparız.
bgi::rtree<std::pair<my_point, int>, bgi::dynamic_rstar>
  rtree (pts, bgi::dynamic_rstar(pts.size()));
Örnek
Şöyle yaparız.
using Point = std::pair<int,int>;
BOOST_GEOMETRY_REGISTER_POINT_2D(Point, int, boost::geometry::cs::cartesian, first,second)
Şöyle yaparız.
std::vector<Point> v{ { 0,3 },{ 1,4 },{ 2,2 },{ 1,0 },{ 0,0 },{ 2,0 },{ 0,1 },{ 0,2 },
  { 3,1 },{ 3,3 },{ 4,4 },{ 4,3 },{ 4,2 } };

using Polygon = boost::geometry::model::polygon<Point>;
Polygon poly, hull;
poly.outer().assign(v.begin(), v.end());
boost::geometry::convex_hull (poly, hull);

Hiç yorum yok:

Yorum Gönder