如何在Boost库中提取refer_segment的点

时间:2013-10-02 09:37:13

标签: c++ boost boost-geometry

我在Boost中有多边形,我试图提取多边形的片段,然后保存用于创建片段的点。我在c ++中使用Boost库。

我该怎么做?

typedef boost::tuple<double, double> point;
typedef boost::geometry::model::polygon<point> polygon;
typedef boost::geometry::model::referring_segment<point> segment;

template<typename Segment>
void get_segments(Segment const& s) {

    std::cout << "Segment is "<<dsv(s) << std::endl;
    std::cout << "Points of this segments are :";
        //Extract the points of this segment somehow


}


int main() {

    polygon poly;
    boost::geometry::read_wkt(
            "polygon((2.0 1.3, 2.4 1.7, 2.8 1.8, 3.4 1.2, 3.7 1.6, 3.4 2.0, 4.1 3.0, 5.3 2.6, 5.4 1.2, 4.9 0.8, 2.9 0.7, 2.0 1.3))",
            poly);

    polygon hull;
    boost::geometry::convex_hull(poly, hull);

    // Now I know I can `dsv()` and print to the screen like this:

    std::cout << "hull: " << dsv(hull) << std::endl;

    boost::geometry::for_each_segment(boost::geometry::exterior_ring(hull),
            get_segments<segment>);


    return 0;
}

1 个答案:

答案 0 :(得分:1)

我找到了解决方案,我使用了get(segment)

template<typename Segment>
void get_segments(Segment const& s) {

    std::cout << "Segment is "<<dsv(s) << std::endl;
    std::cout << "1st Point"<<get<0,0>(s)<<","<<get<0,1>(s)<<std::endl;
    std::cout << "2nd Point"<<get<1,0>(s)<<","<<get<1,1>(s)<<std::endl;