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