Giriş
Şu satırı dahil ederiz.
Elimde şöyle bir yapı olsun
Şu satırı dahil ederiz.
Şu satırı dahil ederiz.
#include <boost/geometry.hpp>namespace bg = boost::geometry;Elimde şöyle bir yapı olsun
struct mypoint
{
  double x, y;
};
Önce access metodunu tanımlarım.
namespace traits
{
  template <typename, int>
  struct access;
  
}namespace traits
{
  template <>
  struct access<mypoint, 0>
  {
    static double get(mypoint const& p)
    {
      return p.x;
    }
  };
  template <>
  struct access<mypoint, 1>
  {
    static double get(mypoint const& p)
    {
      return p.y;
    }
  };
}get<0>(a) - get<0>(b);Şu satırı dahil ederiz.
#include <boost/geometry/geometries/point_xy.hpp>
Şöyle yaparız.
Şu satırı dahil ederiz.
Şöyle yaparız.
Şöyle yaparız.
distance
İki nokta arasındaki mesafeyi verir. Şöyle yaparız.
Varsayılan polygon kapalı ve saat yönündedir. Polygon doldurulurken ilk ve son noktanın aynı olması gerekir.
Açık polygon
Şöyle tanımlanır
polygon <point_type,true,false>
İç ve dış noktalar vector ile tutulur. Dolayısıyla vector metodları kullanılabilir.
Tanımlama
Polygon noktalardan oluştuğu için Point sınıfı ile beraber tanımlanır. Şöyle yaparız.
Şöyle yaparız.
Polygon içindeki boşluklar inner dizilerine yazılır. Örnek ver.
outer metodu
Polygon dış noktaları outer dizisine yazılır. Açık polygon için şöyle yaparız.
correct metodu
Şu satırı dahil ederiz.
Şöyle yaparız.
Şu satırı dahil ederiz.
Şöyle yaparız.
Şöyle yaparız.
Giriş
Şu satırı dahil ederiz.
Şöyle yaparız.
Şöyle yaparız.
Bir çizgi eklemek için şöyle yaparız.
Line yazdırmak için şöyle yaparız.
Tanımlama
Şöyle yaparız. 4. parametre başlangıç noktasını sol alt köşe yapar.
typedef boost::geometry::model::d2::point_xy<double> boostPoint;Şu satırı dahil ederiz.
#include <boost/geometry/geometries/point.hpp>Şöyle yaparız.
typedef bg::model::point<double, 2, bg::cs::cartesian> point;Şöyle yaparız.
point(1., 0.)distance
İki nokta arasındaki mesafeyi verir. Şöyle yaparız.
boostPoint boostPt1 = ...;
boostPoint boostPt2 = ...;
double distance= boost::geometry::distance(boostPt1, boostPt2);#include <boost/geometry/geometries/polygon.hpp>#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>Varsayılan polygon kapalı ve saat yönündedir. Polygon doldurulurken ilk ve son noktanın aynı olması gerekir.
Açık polygon
Şöyle tanımlanır
polygon <point_type,true,false>
İç ve dış noktalar vector ile tutulur. Dolayısıyla vector metodları kullanılabilir.
Tanımlama
Polygon noktalardan oluştuğu için Point sınıfı ile beraber tanımlanır. Şöyle yaparız.
typedef bg::model::point <double, 2, bg::cs::cartesian> point_type;
typedef bg::model::polygon <point_type> polygon;typedef bg::model::d2::point_xy<double> point_type;
typedef bg::model::polygon<point_type> polygon;Şöyle yaparız.
polygon p;Polygon içindeki boşluklar inner dizilerine yazılır. Örnek ver.
outer metodu
Polygon dış noktaları outer dizisine yazılır. Açık polygon için şöyle yaparız.
p.outer().push_back(point(0., 0.));
p.outer().push_back(point(1., 0.));p.outer().push_back(point_type{10,10});
p.outer().push_back(point_type{11,10});
p.outer().push_back(point_type{10,11});
p.outer().push_back(point_type{10,10});
Yazdırma
Şöyle yaparız.std::cout << bg::wkt<polygon>(p) << std::endl;POLYGON((0 0,1 0,1 2,2 3,0 4))correct metodu
Şu satırı dahil ederiz.
#include <boost/geometry/algorithms/correct.hpp>bg::correct(p);Şöyle yaparız.
using point_type = boost::geometry::model::d2::point_xy<double>;
using polygon_type = boost::geometry::model::polygon<point_type>;
using linestring_type = boost::geometry::model::linestring<point_type>;
polygon_type polygon;
...
linestring_type linestring;
...
linestring_type output;
boost::geometry::intersection(polygon, linestring, output);for(auto iter = output.begin(); iter != output.end(); ++iter) {
  cout << boost::geometry::get<0>(*iter)  << " "
       << boostt::geometry::get<1>(*iter) << endl;
}// The output is:
//    11 10
//    12 11Şu satırı dahil ederiz.
#include <boost/geometry/algorithms/is_valid.hpp>typedef bg::model::d2::point_xy<double> TPoint;
typedef bg::model::polygon<TPoint>      TPoly;
TPoly p;
bg::read_wkt("POLYGON((1.504477611940313 3.761194029850755, ...))", p);
std::string reason;
// polys not closed!
if (!bg::is_valid(first, reason))
  std::cout << "polygon not valid: "  << reason << "\n";Şöyle yaparız.
boost::geometry::read_wkt("POLYGON((-57.0635 -3.58045, ...))", p);Şöyle yaparız.
point_type point (-57.8088, -1.5755);
bool result = boost::geometry::within (point, p);Giriş
Şu satırı dahil ederiz.
#include <boost/geometry/io/svg/svg_mapper.hpp>Şöyle yaparız.
typedef boost::geometry::model::d2::point_xy<double> point_type;
typedef boost::geometry::svg_mapper<point_type> mapper_type;Şöyle yaparız.
std::ofstream svg("map.svg");
mapper_type mapper(svg, 400, 400);
Bir çizgi eklemek için şöyle yaparız.
typedef boost::geometry::model::d2::point_xy<double> point_type;
typedef boost::geometry::model::linestring<point_type> linestring_type;
typedef boost::geometry::svg_mapper<point_type> mapper_type;
linestring_type line {{0.0, 0.0}, {100.0, 0.0}, {400.0, 400.0}};
mapper.add (line);typedef boost::geometry::model::d2::point_xy<double> point_type;
typedef boost::geometry::model::polygon<point_type> polygon_type;
polygon_type polygon;
...
mapper.add (polygon);Line yazdırmak için şöyle yaparız.
mapper.map (line, "stroke:rgb(250,0,0);stroke-width:2");mapper.map(polygon, "fill:rgb(255,128,0);stroke:rgb(0,0,100);stroke-width:1");Tanımlama
Şöyle yaparız. 4. parametre başlangıç noktasını sol alt köşe yapar.
typedef strategy::transform::map_transformer
    <
        calculation_type,
        geometry::dimension<Point>::type::value,
        geometry::dimension<Point>::type::value,
        true,  // <== Mirror in Y direction!!!
        SameScale
    > transformer_type; 
 
Hiç yorum yok:
Yorum Gönder