Когда многоугольник является выровненным по оси полем «POLYGON ((0 0,1 0,1 1,0 1))», то union_() не даст правильный результат, просто пустой вывод. Собственно, union_() любого многоугольника не должно быть пустым.Почему boost :: geometry :: union_ не может дать результат для выровненного по оси поля?
Но если вы измените зеленый многоугольник с выровненной по оси поля на «POLYGON» ((2 1,3,2,4 1,7,2,8 1,8)), тогда выдается осмысленный результат (не пустой).
Является ли это ошибкой boost union_()?
Большое спасибо
int main()
{
typedef boost::geometry::model::polygon<boost::geometry::model::d2::point_xy<double> > polygon;
polygon green, blue;
boost::geometry::read_wkt(
"POLYGON((0 0,1 0,1 1,0 1))",
green);
boost::geometry::read_wkt(
"POLYGON((2 1.3,2.4 1.7,2.8 1.8))",
blue);
std::deque<polygon> output;
boost::geometry::union_(green, blue, output);
int i = 0;
std::cout << "green && blue:" << std::endl;
BOOST_FOREACH(polygon const& p, output)
{
std::cout << i++ << ": " << boost::geometry::area(p) << std::endl;
}
return 0;
}
Кажется, что я получил ответ. Но я должен проверить это. Просто вызовите boost :: geometry :: correct() для каждого многоугольника. И затем boost даст правильный результат для uion_() и intersection(). Подожди минуту. Позвольте мне проверить это. –