Giriş
Şu satırı dahil ederiz.
Tanımlama - box
Şöyle yaparız.
Şöyle yaparız.
Örnek
3 boyutlu nokta için şöyle yaparız.
İki boyutlu nokta için şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Örnek
Şöyle yaparız.
Eğer şöyle tanımladıysak
Şöyle yaparız.
Şöyle yaparız.
Örnek ver.
clear metodu
Örnek ver.
count metodu
Örnek ver.
elements metodu
Şöyle yaparız.
Şöyle yaparız.
Eğer rtree box ve index içeriyorsa şöyle yaparız.
Eğer rtree box ve index içeriyorsa şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Açıklaması şöyle. Buna KNN sorgusu deniyor. K tane nearest neighbor anlamına gelir.
Elimizde bir nokta yani p olsun. p'ye en yakın noktaları bulur.
Örnek
Şöyle yaparız
Örnek
En yakın noktaları bulup silmek için şöyle yaparız.
Açıklaması şöyle
Şöyle yaparız.
Şöyle yaparız.
Şu satırı dahil ederiz.
#include <boost/geometry.hpp>
#include <boost/geometry/extensions/index/rtree/rtree.hpp>
Kolay kullanım için şu şöyle yaparız.namespace bg = boost::geometry;
namespace bgi = boost::geometry::index;
rtree space partitioning çözümlerinde bir tanesidir. Bu yapı K-means Clustering gibi clustering (kümeleme) desteği sunmaz.Tanımlama - box
Şöyle yaparız.
Tanımlama - std::pair - Boxtypedef bg::model::point<float,2,bg::cs::cartesian> Point; typedef bg::model::box<Point> Box; typedef bgi::rtree<Box
,unsigned > RTree
;
Şöyle yaparız.
typedef std::pair<Box, int> Value;
typedef bgi::rtree<Value, bgi::linear<32> > RTree;
Şöyle yaparız.typedef std::pair<box_t, Data> Value;
typedef rtree<Value, bgi::quadratic<16>> RTree
;
Tanımlama - std::pair - PointÖrnek
3 boyutlu nokta için şöyle yaparız.
typedef bg::model::point<double , 3, bg::cs::cartesian> BoostPoint;
typedef std::pair<BoostPoint, unsigned> PointValue;
typedef bgi::rtree< PointValue, bgi::quadratic<16> >
RTree;
3 boyutlu nokta ve dynamic_quadratic için şöyle yaparız.typedef bgi::rtree<PointValue, bgi::dynamic_quadratic>
RTree;
Örnekİki boyutlu nokta için şöyle yaparız.
typedef bg::model::point<float, 2, bg::cs::cartesian> point;
typedef std::pair<point, unsigned> value;
bgi::rtree< value, bgi::quadratic<16> > rtree;
Constructor - defaultŞöyle yaparız.
RTree rtree;
ConstructorŞöyle yaparız.
RTree rtree (6,3);
Constructor - VectorÖrnek
Şöyle yaparız.
std::vector<PointValue> points;
for(...)
{
//fill in the points vector
}
RTree rtree (points);
ÖrnekEğer şöyle tanımladıysak
typedef bgi::rtree<PointValue, bgi::dynamic_quadratic>
RTree;
Şöyle yaparız.RTree rtree (points, points.size());
ÖrnekŞö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));
// ....
bgi::rtree<std::pair<my_point, int>, bgi::dynamic_rstar>
rtree(pts, bgi::dynamic_rstar(pts.size()));
begin metoduŞöyle yaparız.
auto it = rtree.begin();
bounds metoduÖrnek ver.
clear metodu
Örnek ver.
count metodu
Örnek ver.
elements metodu
Şöyle yaparız.
std::cout<<"number of elements: ";
std::cout<<rtree.elements()<<std::endl;
empty metoduŞöyle yaparız.
while(!rtree.empty()) {
...
}
find metoduEğer rtree box ve index içeriyorsa şöyle yaparız.
box query_box = ...;
//search for boxes that are within query_box
std::deque<unsigned> &boxValue = rtree.find (query_box);
insert metodu - boxEğer rtree box ve index içeriyorsa şöyle yaparız.
unsigned i=0;
box b = ...;
rtree.insert (b,i);
insert metodu - iteratorŞöyle yaparız.
std::vector<Value> values;
/*fill the values container*/
rtree.insert(values.begin(), values.end());
insert metodu - pointŞöyle yaparız.
// create some values
for ( unsigned i = 0 ; i < 10 ; ++i )
{
point p = point(i, i);
rtree.insert(std::make_pair(p, i));
}
print metoduŞöyle yaparız.
rtree.print();
query metodu - pointAçıklaması şöyle. Buna KNN sorgusu deniyor. K tane nearest neighbor anlamına gelir.
"Get me the nearest 'n' points from here"query - nearest
Elimizde bir nokta yani p olsun. p'ye en yakın noktaları bulur.
Örnek
Şöyle yaparız
#include <boost/geometry/geometry.hpp>
#include <boost/geometry/core/coordinate_system.hpp>
#include <boost/geometry/geometries/segment.hpp>
#include <boost/geometry/index/predicates.hpp>
using Point = boost::geometry::model::point<float, 2,boost::geometry::cs::cartesian>;
using Segment = boost::geometry::model::segment<Point>;
using Value = std::pair<Segment, size_t>;
boost::geometry::index::rtree<Value, boost::geometry::index::rstar<16>> rtree;
std::vector<Value> results;
rtree.query(boost::geometry::index::nearest(Point(1, 2), 1), std::back_inserter(results));
Örnek
En yakın noktaları bulup silmek için şöyle yaparız.
value match;
if (rtree.query(bgi::nearest(p, 1), &match)) {
...
}
Daha sonra şöyle yaparız.if (bg::distance(p, match.first) <= 3) {
rtree.remove(match);
}
query metodu - rectangular boxAçıklaması şöyle
"Get me all the points that are inside this rectangle"Şö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';
}
query metodu - user defined queryŞöyle yaparız.
// search for nearest neighbours
std::vector<value> returned_values;
point sought = point(5, 5);
rtree.query(bgi::satisfies([&](value const& v)
{return bg::distance(v.first, sought) < 2;}),
std::back_inserter(returned_values));
qbegin metodu - point
Şöyle yaparız.rtree.qbegin(bgi::nearest(Point(4, 4), 2))
Şöyle yaparız.for ( Rtree::const_query_iterator it = tree.qbegin(bgi::nearest(pt, 10000)) ;
it != tree.qend() ; ++it )
{
// do something with value
...
}
remove metoduŞöyle yaparız.
auto it = rtree.begin();
auto value = *it;
rtree.remove (value);
Hiç yorum yok:
Yorum Gönder