У меня есть небольшое тестовое приложение, которое пересекает несколько прямоугольников с помощью 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.) Если это ошибка, есть ли способ обойти проблему?