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

Boost.Geometry lengthとperimeter

C++

length()は、図形に含まれる連続した点の、距離の和を計算するアルゴリズムです。
Boost 1.47.0時点では、linestring以外は0が返されるようです。

#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;

int main()
{
    bg::model::linestring<point> line = boost::assign::list_of<point>
        (0, 0)
        (1, 1)
        (4, 8)
        (3, 2)
        ;

    const double len = bg::length(line);
    std::cout << len << std::endl;
}
15.1127

三角形の場合は、perimeter()を使用します。
perimeter()は、三角形以外は0が返るようです。

#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;

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

int main()
{
    polygon poly;
    bg::exterior_ring(poly) = boost::assign::list_of<point>
        (1, 1)
        (5, 5)
        (5, 1)
        (1, 1)
        ;

    const double len = bg::perimeter(poly);
    std::cout << len << std::endl;
}
13.6569


参照:
length algorithm
perimeter algorithm