Lorsque le polygone est une boîte alignée sur les axes "POLYGON ((0 0,1 0,1 1,0 1))", union_() ne donnera pas un résultat correct, juste une sortie vide. En fait, union_() de n'importe quel polygone ne devrait pas être vide. Mais si vous changez le polygone vert de la boîte d'alignement d'axes en "POLYGON ((2 1.3.2.4 1.7.2.8 1.8))", alors il en sort une sortie significative (pas vide).Pourquoi boost :: geometry :: union_ ne peut pas donner de résultat pour axis-aligned-box?
Est-ce un bug de boost union_()?
Un grand merci
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;
}
Il semble que j'ai eu une réponse. Mais je dois le vérifier. Appelez simplement boost :: geometry :: correct() pour chaque polygone. Et puis boost donnera le résultat correct pour uion_() et intersection(). Attends une minute. Laisse moi le tester. –