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>
Kolay çalışmak için şöyle yaparız.namespace bg = boost::geometry;
Kendi SınıfımElimde şöyle bir yapı olsun
struct mypoint
{
double x, y;
};
Önce access metodunu tanımlarım.
namespace traits
{
template <typename, int>
struct access;
}
Daha sonra 0 ve 1 gibi indeksler için erişim metodları yazarım.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;
}
};
}
Şöyle kullanırım.get<0>(a) - get<0>(b);
point_xy SınıfıŞu satırı dahil ederiz.
#include <boost/geometry/geometries/point_xy.hpp>
Tanimlama
Şö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;
point SınıfıŞu satırı dahil ederiz.
#include <boost/geometry/geometries/point.hpp>
TanımlamaŞöyle yaparız.
typedef bg::model::point<double, 2, bg::cs::cartesian> point;
Constructor
Şöyle yaparız.
point(1., 0.)
Point İçin Free Style Metodlardistance
İki nokta arasındaki mesafeyi verir. Şöyle yaparız.
boostPoint boostPt1 = ...;
boostPoint boostPt2 = ...;
double distance= boost::geometry::distance(boostPt1, boostPt2);
Şu satırı dahil ederiz.#include <boost/geometry/geometries/polygon.hpp>
Genellikle şu satırlar da dahil edilir.#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
Kapalı polygonVarsayı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;
Şöyle yaparız.typedef bg::model::d2::point_xy<double> point_type;
typedef bg::model::polygon<point_type> polygon;
ConstructorŞöyle yaparız.
polygon p;
inner metoduPolygon 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.));
Kapalı polygon için şöyle yaparız.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;
Çıktı olarak şunu alırız.POLYGON((0 0,1 0,1 2,2 3,0 4))
Polygon İçin Free Style Metodlarcorrect metodu
Şu satırı dahil ederiz.
#include <boost/geometry/algorithms/correct.hpp>
Şöyle yaparız.bg::correct(p);
intersection metoduŞö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);
Kesişimi şöyle dolaşırız.for(auto iter = output.begin(); iter != output.end(); ++iter) {
cout << boost::geometry::get<0>(*iter) << " "
<< boostt::geometry::get<1>(*iter) << endl;
}
Çıktı olarak şunu alırız.// The output is:
// 11 10
// 12 11
is_valid metoduŞu satırı dahil ederiz.
#include <boost/geometry/algorithms/is_valid.hpp>
Şöyle yaparız.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";
read_wkt metoduŞöyle yaparız.
boost::geometry::read_wkt("POLYGON((-57.0635 -3.58045, ...))", p);
within metoduŞöyle yaparız.
point_type point (-57.8088, -1.5755);
bool result = boost::geometry::within (point, p);
svg_mapper SınıfıGiriş
Şu satırı dahil ederiz.
#include <boost/geometry/io/svg/svg_mapper.hpp>
TanımlamaŞöyle yaparız.
typedef boost::geometry::model::d2::point_xy<double> point_type;
typedef boost::geometry::svg_mapper<point_type> mapper_type;
ConstructorŞöyle yaparız.
std::ofstream svg("map.svg");
mapper_type mapper(svg, 400, 400);
add metoduBir ç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);
Polygon eklemek için şöyle yaparız.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);
map metoduLine yazdırmak için şöyle yaparız.
mapper.map (line, "stroke:rgb(250,0,0);stroke-width:2");
Polygon yazdırmak için şöyle yaparız.mapper.map(polygon, "fill:rgb(255,128,0);stroke:rgb(0,0,100);stroke-width:1");
map_transformer Sınıfı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