envelope()は、図形の包絡線を計算するアルゴリズムです。
第1引数として渡した図形の包絡線を、Box Conceptの型として第2引数で返します。
#include <iostream> #include <boost/geometry.hpp> #include <boost/geometry/geometries/point_xy.hpp> #include <boost/geometry/geometries/polygon.hpp> #include <boost/geometry/geometries/box.hpp> #include <boost/assign/list_of.hpp> namespace bg = boost::geometry; typedef bg::model::d2::point_xy<double> point; typedef bg::model::polygon<point> polygon; typedef bg::model::box<point> box; int main() { polygon poly; bg::exterior_ring(poly) = boost::assign::list_of<point> (2.0, 1.3) (2.4, 1.7) (3.6, 1.2) (4.6, 1.6) (4.1, 3.0) (5.3, 2.8) (5.4, 1.2) (4.9, 0.8) (3.6, 0.7) (2.0, 1.3) ; box bx; bg::envelope(poly, bx); std::cout << "poly: " << bg::dsv(poly) << std::endl << "bx: " << bg::dsv(bx) << std::endl; }
poly: (((2, 1.3), (2.4, 1.7), (3.6, 1.2), (4.6, 1.6), (4.1, 3), (5.3, 2.8), (5.4, 1.2), (4.9, 0.8), (3.6, 0.7), (2, 1.3))) bx: ((2, 0.7), (5.4, 3))
点線部分が、envelope()で計算した包絡線です。
また、return_envelope()を使用すれば、計算結果を参照の引数ではなく戻り値で返してくれます。
return_envelope()には、Box Conceptの型を指定します。
#include <iostream> #include <boost/geometry.hpp> #include <boost/geometry/geometries/point_xy.hpp> #include <boost/geometry/geometries/polygon.hpp> #include <boost/geometry/geometries/box.hpp> #include <boost/assign/list_of.hpp> namespace bg = boost::geometry; typedef bg::model::d2::point_xy<double> point; typedef bg::model::polygon<point> polygon; typedef bg::model::box<point> box; int main() { polygon poly; bg::exterior_ring(poly) = boost::assign::list_of<point> (2.0, 1.3) (2.4, 1.7) (3.6, 1.2) (4.6, 1.6) (4.1, 3.0) (5.3, 2.8) (5.4, 1.2) (4.9, 0.8) (3.6, 0.7) (2.0, 1.3) ; const box bx = bg::return_envelope<box>(poly); std::cout << "poly: " << bg::dsv(poly) << std::endl << "bx: " << bg::dsv(bx) << std::endl; }
poly: (((2, 1.3), (2.4, 1.7), (3.6, 1.2), (4.6, 1.6), (4.1, 3), (5.3, 2.8), (5.4, 1.2), (4.9, 0.8), (3.6, 0.7), (2, 1.3))) bx: ((2, 0.7), (5.4, 3))
参照:
envelope algorithm
return_envelope algorithm