这是您作为基里尔回答下方评论提出的原始问题的扩展示例:多边形之间的交叉点是否可能?
是的,Boost.Geometry(又名 GGL)支持多边形-多边形相交
#include <iostream>
#include <vector>
#include <boost/geometry/geometry.hpp>
#include <boost/geometry/geometries/cartesian2d.hpp>
#include <boost/geometry/geometries/adapted/c_array_cartesian.hpp>
using namespace boost::geometry;
int main(void)
{
// Define a polygons and fill the outer rings.
polygon_2d a;
{
const double c[][2] = {
{160, 330}, {60, 260}, {20, 150}, {60, 40}, {190, 20}, {270, 130}, {260, 250}, {160, 330}
};
assign(a, c);
}
correct(a);
std::cout << "A: " << dsv(a) << std::endl;
polygon_2d b;
{
const double c[][3] = {
{300, 330}, {190, 270}, {150, 170}, {150, 110}, {250, 30}, {380, 50}, {380, 250}, {300, 330}
};
assign(b, c);
}
correct(b);
std::cout << "B: " << dsv(b) << std::endl;
// Calculate interesection
typedef std::vector<polygon_2d > polygon_list;
polygon_list v;
intersection_inserter<polygon_2d>(a, b, std::back_inserter(v));
std::cout << "Intersection of polygons A and B" << std::endl;
for (polygon_list::const_iterator it = v.begin(); it != v.end(); ++it)
{
std::cout << dsv(*it) << std::endl;
}
return 0;
}
这是结果(相交的多边形向南移动以获得更好的可见性):
![替代文字](https://farm5.static.flickr.com/4067/4304686167_dba8541375.jpg)
我希望它对你有用。