我有两个环A和B,我想使用
以下是输出结果:(10, 5) 是 P1,(5, 0) 是 P2,这不是我预期的。
boost::geometry::intersection()
来返回线串(橙色箭头):
但是我的代码只返回相交点P1和P2。我应该修改哪一部分?#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/register/ring.hpp>
#include <boost/geometry/geometries/register/point.hpp>
#include <iostream>
namespace bg = boost::geometry;
typedef bg::model::point<double, 2, bg::cs::cartesian> point_t;
typedef bg::model::linestring<point_t> linestring_t;
typedef bg::model::ring<point_t> ring_t;
typedef bg::model::polygon<point_t> polygon_t;
typedef bg::model::multi_point<point_t> mpoint_t;
typedef bg::model::multi_linestring<linestring_t> mlinestring_t;
typedef bg::model::multi_polygon<polygon_t> mpolygon_t;
int main() {
point_t ptA0(0, 0);
point_t ptA1(10, 0);
point_t ptA2(10, 10);
point_t ptA3(0, 10);
ring_t ringA;
bg::append(ringA, ptA0);
bg::append(ringA, ptA1);
bg::append(ringA, ptA2);
bg::append(ringA, ptA3);
bg::append(ringA, ptA0);
point_t ptB0(5, -5);
point_t ptB1(15, -5);
point_t ptB2(15, 5);
point_t ptB3(5, 5);
ring_t ringB;
bg::append(ringB, ptB0);
bg::append(ringB, ptB1);
bg::append(ringB, ptB2);
bg::append(ringB, ptB3);
bg::append(ringB, ptB0);
std::vector<linestring_t> resline;
bg::intersection(ringB, ringA, resline);
for (int i = 0; i < resline.size(); i++) {
std::cout << bg::dsv(resline[i]) << std::endl;
}
return 0;
}
以下是输出结果:(10, 5) 是 P1,(5, 0) 是 P2,这不是我预期的。
((10, 5), (10, 5))
((5, 0), (5, 0))