boost::geometry如何创建图形,计算交集?
在boost::geometry中,创建几何对象可以通过定义其坐标序列来完成。例如,以下代码展示了如何使用vector创建一个多边形:
#include
#include
namespace bg = boost::geometry;
typedef bg::model::d2::point_xy
typedef bg::model::polygon
int main()
{
std::vector
polygon poly;
bg::append(poly.outer(), points);
}
上述代码首先定义了一个点类型bg::model:d2::point_xy
计算几何图形之间的交集也很简单,只需要调用库提供的相应函数即可。例如,在上面创建的两个矩形之间计算交集可以这样实现:
#include
#include
#include
namespace bg = boost::geometry;
typedef bg::model::d2::point_xy
typedef bg::model::polygon
int main()
{
// create two rectangles
std :: vector< point > pts_1{{-10.0,-10.0},{10.0,-10.0},{10.0,10.0},{-10.0, 10}};
polygon poly_1;
bg::append(poly_1.outer(), pts_1);
std :: vector< point > pts_2{{-5,-5}, {15,-5}, {15, 15}, {-5, 15}};
polygon poly_2;
bg::append(poly_2.outer(), pts_2);
// calculate the intersection
std::deque
bg::intersection(poly_1,poly_2,output);
// print the result
for(auto& p:output)
{
for (auto it = boost::begin(bg::exterior_ring(p)); it != boost::end(bg::exterior_ring(p)); ++it)
std :: cout << "("<
在上述代码中,我们首先创建了两个多边形表示两个矩形。然后通过调用bg::intersection()方法计算它们之间的交集,并将结果存储在一个std :: deque容器中。最后,我们遍历输出容器并打印交集的坐标序列。
总之,boost::geometry库提供了丰富的几何对象和操作函数以支持各种常见应用场景。