7 Şubat 2018 Çarşamba

geometry polygon Sınıfı

Giriş
Şu satırları dahil ederiz.
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/polygon.hpp>
Açıklaması şöyle.
According to the documentation of the Polygon Concept the ring types must fulfil the Ring Concept.
According to the documentation of that Ring Concept std::list<> is out of the question, because std::list's iterators are not random access iterators
Polygon üzerinde matris dönüşümü yapmak mümkün değil.

Tanımlama
Her polygon point nesnelerini saklar.

Örnek - int nokta
Şöyle yaparız.
using point      = bgm::d2::point_xy<int>;
using linestring = bgm::linestring<point>;
using ring       = bgm::ring<point>;
using polygon    = bgm::polygon<point>;
Örnek - double nokta
Şöyle yaparız.
using PointType = boost::geometry::model::d2::point_xy <double>;
using PolygonType = boost::geometry::model::polygon <PointType>;
Örnek - cpp_dec_float_100 nokta
Şöyle yaparız.
#include <boost/multiprecision/cpp_dec_float.hpp>
#include <boost/geometry.hpp>
#include <boost/geometry/io/io.hpp>
#include <boost/geometry/geometries/point_xy.hpp>

namespace bg = boost::geometry;
namespace bgm = bg::model;

typedef boost::multiprecision::cpp_dec_float_100 base_type;
typedef bgm::d2::point_xy<base_type> point_type;
typedef bgm::polygon<point_type> polygon_type;
typedef bgm::multi_polygon<polygon_type> multipolygon_type;

polygon_type in;
Örnek - checked_int128_t
Şöyle yaparız.
typedef bgm::polygon<bgm::d2::point_xy<mp::checked_int128_t, bg::cs::cartesian>> TPolygon;
Polygon boost::geometry::append() , boost::geometry::read_wkt() çağrısı ile doldurulur.

Boot polygon kütüphanesi
Hem geometry ve hem de polygon kütüphaneleri polygon sınıfları içerir. geometry'den diğer kütüphaneyi kullanmak için şu satırı dahil ederiz.
#include <boost/geometry/geometries/adapted/boost_polygon.hpp>
Convex ve Concave
İçbükey polygon'un tüm açıları 180 dereceden küçüktür.

Constructor - default
Şöyle yaparız.
PolygonType polygon;
Constructor - initializer_list
Şöyle yaparız.
PointType p1(1,3);
PointType p2(2,4);

PolygonType my_polygon = { p1, p2 };
Şöyle yaparız. outer()'a push_back yapmak gibidir.
PolygonType pol {
    { {0, 0}, {0, 2}, {2, 2}, {2, 0}, {0, 0} }
};
Constructor - ring
Şöyle yaparız.
namespace bg = boost::geometry;
namespace bgm = bg::model;

using point      = bgm::d2::point_xy<int>;
using linestring = bgm::linestring<point>;
using ring       = bgm::ring<point>;
using polygon    = bgm::polygon<point>;


linestring ls { {1,3}, {4,5}, {9, 0} };

polygon p { ring{ls.begin(), ls.end()} };
inners metodu
Şöyle yaparız.
model::ring<PointType> ring { {0, 0}, {2, 0}, {2, 2}, {0, 2} };
polygon.inners().push_back (ring);
outer metodu
Bir vector döner. Şöyle yaparız.
polygon.outer().push_back( point(2.5, 7.5) );
Şöyle yaparız.
polygon.outer().insert( poly.outer().begin()+2, point(2.5, 7.5) );

Hiç yorum yok:

Yorum Gönder