如何在boost中填充多边形?

时间:2014-08-05 13:42:53

标签: c++ boost polygon triangulation boost-geometry

我有这样的代码:

  

typedef boost :: geometry :: model :: polygon< Point2,false>多边形;

     

多边形边界;

我需要填补边界。我认为它一定很容易,我从来没有使用过boost,而且我还没有找到指令。我查看了许多示例,但它们并未包含所需的操作。 我尝试使用项目umeshu https://github.com/vladimir-ch/umeshu/来创建具有良好三角测量的网格。我只需要了解如何填充初始数据。

1 个答案:

答案 0 :(得分:2)

您想要的界面是:

//! This refers to the exterior ring of the polygon.
inline ring_type& outer() { return m_outer; }

//! This refers to a collection of rings which are holes inside the polygon.
inline inner_container_type & inners() { return m_inners; }

默认情况下,ring_type是一个std :: vector,其中Point是您指定的模板参数(在您的情况下为Point2。)

尝试:

boundary.outer().push_back(Point2(x, y)); //This fills the exterior boundary with one point whose coordinates are x and y.

这是一个完整的例子:

#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point.hpp>
#include <boost/geometry/geometries/polygon.hpp>

#include <iostream>

namespace bg = boost::geometry;

int main(void)
{
    typedef bg::model::point<double, 2, bg::cs::cartesian> point;
    typedef bg::model::polygon<point> polygon;

    //! create a polygon
    polygon p;
    p.outer().push_back(point(0., 0.));
    p.outer().push_back(point(1., 0.));
    p.outer().push_back(point(1., 2.));
    p.outer().push_back(point(2., 3.));
    p.outer().push_back(point(0., 4.));

    //! display it
    std::cout << "generated polygon:" << std::endl;
    std::cout << bg::wkt<polygon>(p) << std::endl;

    return 0;
}

输出:

generated polygon:
POLYGON((0 0,1 0,1 2,2 3,0 4))
Press any key to continue . . .