如何获取存储在Boost多边形中的所有点

5
我想迭代遍历boost多边形中的所有点。是否有相应的API可以处理这个问题?

2
一个 Boost.Polygon 多边形还是一个 Boost.Geometry 多边形? - genpfault
3个回答

6

这里有一个简单的示例,介绍如何设置和获取BOOST多边形的顶点坐标:

#include <boost/geometry.hpp>
namespace bg = boost::geometry;
typedef bg::model::d2::point_xy<double> boost_point;
typedef bg::model::polygon<boost_point> boost_polygon;

[...]

//setting vertices
boost_polygon poly;
bg::append(poly.outer(), boost_point(-1, -1));
bg::append(poly.outer(), boost_point(-1,  1));
bg::append(poly.outer(), boost_point( 1,  1));
bg::append(poly.outer(), boost_point( 1, -1));
bg::append(poly.outer(), boost_point(-1, -1));

//getting the vertices back
for(auto it = boost::begin(boost::geometry::exterior_ring(poly)); it != boost::end(boost::geometry::exterior_ring(poly)); ++it)
{
    double x = bg::get<0>(*it);
    double y = bg::get<1>(*it);
    //use the coordinates...
}

0

http://www.boost.org/doc/libs/1_62_0/libs/polygon/doc/gtl_polygon_concept.htm

template <typename T> point_iterator_type begin_points(const T& polygon)

该函数期望一个多边形模型。返回对应于多边形顶点的点范围的起始迭代器。

template <typename T> point_iterator_type end_points(const T& polygon)

该函数期望一个多边形模型。返回对应于多边形顶点的点范围的结束迭代器。


0
你还可以用Olek的答案中的方法来简化最后一个循环。
for( const auto& point : poly.outer() )
{
  double x = point.x();
  double y = point.y();
  //use the coordinates...
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接