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

Q: How can I access the coordinate of the point in a boost::segment?

我是 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';
    } 
}     

访问坐标的通用方法是通过 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 应该也可以,你有什么问题吗?如果有错误,您可以在 GitHub or Boost Trac.

报告

是的,似乎目前 (Boost 1.64) for_each_point 没有为 Segments 实现。它可能应该。


您也可以使用您自己的类型,其中包含您需要的成员,并使其适应 Boost.Geometry 细分概念: