问:如何访问boost :: segment中的点的坐标?

时间:2017-03-17 03:34:51

标签: c++ boost boost-geometry

我是boost::geometry的新手。我尝试使用for_each_point来访问boost::segment中的点,但它不起作用。我也尝试使用segment_view来访问它,但该点的输出很奇怪 是否有任何机制可以迭代boost:: segment中的每个点?

namespace bg = boost::geometry;

typedef bg::model::d2::point_xy<int> CleanPoint;
typedef boost::geometry::model::segment<CleanPoint> CleanSegment;
typedef boost::geometry::segment_view<CleanSegment> CleanSegmentView;

BOOST_FOREACH(CleanSegment seg, frontier_cells_){
    CleanSegmentView view(seg);

    //Iterating over the points of this segment
    for (boost::range_iterator<CleanSegmentView const>::type it = boost::begin(view);
                     it != boost::end(view); ++it)
    {
        std::cout << " Point = " << boost::geometry::dsv(*it)<<'\n';
    } 
}     

1 个答案:

答案 0 :(得分:0)

访问坐标的一般方法是通过get / set免费函数:

pt = point{get<0, 0>(segment), get<0, 1>(segment)};
set<0, 0>(segment, get<0>(pt));
set<0, 1>(segment, get<1>(pt));

boost::model::segment<>源自std::pair<>,因此您应该可以通过firstsecond属性访问积分:

pt = segment.first;

segment_view也应该有效,你有什么问题吗?如果存在错误,您可以在GitHubBoost Trac报告错误。

是的,似乎目前(Boost 1.64)for_each_point未针对细分实施。它可能应该。

你也可以使用你自己的类型,拥有你需要的成员,并使其适应Boost.Geometry Segment概念: