我有一个小测试应用程序可以将几个矩形与 boost::geometry 相交。
typedef boost::geometry::model::point
<
double, 2, boost::geometry::cs::cartesian
> point;
typedef boost::geometry::model::polygon<point > polygon;
polygon Intersect(polygon p1, polygon p2) {
std::vector < polygon > result;
boost::geometry::intersection(p1, p2, result);
return result.front();
}
polygon IntersectionTest() {
polygon one, two, three, four;
boost::geometry::read_wkt("POLYGON((35 25, 35 35, 15 35, 15 25, 35 25))", one);
boost::geometry::read_wkt("POLYGON((45 30, 45 50, 25 50, 25 30, 45 30))", two);
boost::geometry::read_wkt("POLYGON((50 0, 50 40, 10 40, 10 0, 50 0))", three);
boost::geometry::read_wkt("POLYGON((40 20, 40 60, 0 60, 0 20, 40 20))", four);
return Intersect(Intersect(Intersect(one, two), three), four);
}
我必须做错事,因为我希望结果是这样的,(35 30, 35 40, 25 40, 25 30, 35 30)
但我得到了 10 点长的多边形,其中包含点,50 0
而平行矩形的交点应该始终是具有 4+1 点的矩形并且50 0
位于边缘,所以它不应该是在十字路口。如果我将它放入SVG中,矩形似乎与我期望的一样。
有什么问题?如果这是一个错误,我该boost::geometry
如何确保它是?(我目前使用的是 1.48。)如果它是一个错误,有没有办法绕过这个问题?