読者です 読者をやめる 読者になる 読者になる

Boost.Geometry simplify

C++

simplify()は、図形内の点を間引いて、より単純な図形に変換するアルゴリズムです。
第1引数に単純化する元となる図形、第2引数に出力先変数への参照、第3引数に単純化の距離を指定します。


以下は、線を単純化する例:

#include <iostream>
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/linestring.hpp>
#include <boost/assign/list_of.hpp>

namespace bg = boost::geometry;

typedef bg::model::d2::point_xy<double> point;
typedef bg::model::linestring<point> linestring;

int main()
{
    const linestring line = boost::assign::list_of<point>
        (3, 3)
        (3.8, 4)
        (6, 6)
        (4, 9)
        (5, 8)
        (7, 7)
        ;

    linestring result;
    bg::simplify(line, result, 0.5);

    std::cout << bg::dsv(line) << std::endl;
    std::cout << bg::dsv(result) << std::endl;
}
((3, 3), (3.8, 4), (6, 6), (4, 9), (5, 8), (7, 7))
((3, 3), (6, 6), (4, 9), (7, 7))


緑が元の線、青がsimplifyした線です。


参照:
simplify algorithm