boost::geometry如何创建图形,计算交集?

在boost::geometry中,创建几何对象可以通过定义其坐标序列来完成。例如,以下代码展示了如何使用vector创建一个多边形:

#include
#include

namespace bg = boost::geometry;

typedef bg::model::d2::point_xy point;
typedef bg::model::polygon polygon;

int main()
{
std::vector points = { {0, 0}, {1, 0}, {1, 1}, {0, 1} };
polygon poly;
bg::append(poly.outer(), points);
}

上述代码首先定义了一个点类型bg::model:d2::point_xy和一个多边形类型bg::model:polygon。然后在main函数中,我们将点的坐标存储在std :: vector容器中,并通过调用bg::append()方法将它们添加到多边形的外环(outer ring)。

计算几何图形之间的交集也很简单,只需要调用库提供的相应函数即可。例如,在上面创建的两个矩形之间计算交集可以这样实现:

#include
#include
#include

namespace bg = boost::geometry;

typedef bg::model::d2::point_xy point;
typedef bg::model::polygon 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 output;
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 << "("<(*it) << ", " << bg :: get< 1 >(*it)<<") "; std :: cout << "\n"; } }

在上述代码中,我们首先创建了两个多边形表示两个矩形。然后通过调用bg::intersection()方法计算它们之间的交集,并将结果存储在一个std :: deque容器中。最后,我们遍历输出容器并打印交集的坐标序列。

总之,boost::geometry库提供了丰富的几何对象和操作函数以支持各种常见应用场景。

# 回答此问题

您的电子邮箱地址不会被公开。 必填项已用*标注