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

Boost.Geometry centroid

C++

centroid()は、図形の中心座標を求める関数です。
第1引数に対象の図形、第2引数として中心座標の結果を格納する変数の参照を渡します。

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

namespace bg = boost::geometry;

int main()
{
    typedef bg::model::d2::point_xy<double> point;
    typedef bg::model::polygon<point> polygon;

    polygon poly;
    bg::exterior_ring(poly) = boost::assign::list_of<point>
        (2, 0)
        (4, 3)
        (0, 3)
        ;

    point p;
    bg::centroid(poly, p);

    std::cout << bg::dsv(p) << std::endl;
}
(1.55556, 1.66667)

return_centroid()を使うと、参照ではなく戻り値で座標を返してくれます。
テンプレート引数で座標を表すPoint Conceptの型を指定します。

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

namespace bg = boost::geometry;

int main()
{
    typedef bg::model::d2::point_xy<double> point;
    typedef bg::model::polygon<point> polygon;

    polygon poly;
    bg::exterior_ring(poly) = boost::assign::list_of<point>
        (2, 0)
        (4, 3)
        (0, 3)
        ;

    const point p = bg::return_centroid<point>(poly);

    std::cout << bg::dsv(p) << std::endl;
}
(1.55556, 1.66667)


参照:

centroid algorithm
return_centroid algorithm