Closed
Description
Program
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/polygon.hpp>
#include <boost/multiprecision/cpp_dec_float.hpp>
namespace bg = boost::geometry;
namespace bm = boost::multiprecision;
typedef bm::cpp_dec_float_100 float_type;
typedef bg::model::d2::point_xy<float_type> point_type;
typedef bg::model::polygon<point_type, false, true> polygon_type;
typedef bg::model::multi_polygon<polygon_type> multi_polygon_type;
int main() {
polygon_type polygon_layer;
bg::read_wkt("POLYGON((0 0, 2 0,2 2, 0 2, 0 0))", polygon_layer);
boost::geometry::correct(polygon_layer);
multi_polygon_type metal_layer;
polygon_type metal_polygon1;
bg::read_wkt( "POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))",metal_polygon1);
boost::geometry::correct(metal_polygon1);
metal_layer.push_back(metal_polygon1);
polygon_type metal_polygon2;
bg::read_wkt("POLYGON((0 1, 1 1,1 2, 0 2, 0 1))",metal_polygon2);
boost::geometry::correct(metal_polygon2);
metal_layer.push_back(metal_polygon2);
multi_polygon_type result;
bg::difference(polygon_layer, metal_layer, result);
std::cout << "Difference Result:" << std::endl;
for (const auto& poly : result) {
std::cout << std::setprecision(10) << bg::wkt(poly) << std::endl;
}
return 0;
}
The answer is POLYGON((0 1,1 1,1 0,2 0,2 2,1 2,0 2,0 1))
but I think the answer should be POLYGON((1 0,2 0,2 2,1 2,1,0))
It seems like difference only used to calculate polygon_layer and metal_polygon1, the metal_polygon2 was ignored
I try to use correct function as you can see in the program, but it is useless
Look forward to your reply,thanks!