Я пытаюсь вычислить разницу между 2 многоугольниками (на самом деле прямолинейными формами для простоты). Например, shape1 имеет список точек {0 0, 100, 0, 100 100, 0 100}, а shape2 имеет список точек {25 25, 75 25, 75 75, 25 75}. Итак, по концепции я ожидаю, что "shape1 - shape2" предоставит мне 4 прямоугольных коробки, которые могут иметь форму кольца или пончика. Я не знаю, как этого добиться, но я нашел в Интернете библиотеку «ускорения» и попробовал это так:
#include <iostream>
#include <list>
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/polygon.hpp>
#include <boost/foreach.hpp>
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 100 0 100 100 0 100))", green);
boost::geometry::read_wkt( "POLYGON((25 25 75 22 75 75 25 75))", blue);
std::list<polygon> output;
boost::geometry::difference(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;
}
output.clear();
boost::geometry::difference(blue, green, output);
i = 0;
std::cout << "blue - green:" << std::endl;
BOOST_FOREACH(polygon const& p, output)
{
std::cout << i++ << ": " << boost::geometry::area(p) << std::endl;
}
return 0;
}
Однако ничего не распечатывалось... Мой план состоял в том, чтобы найти способ преобразовать результаты вывода в прямоугольные блоки {0 0 100 0 100 25 0 25} {0 75 100 75 100 100 0 100} {0 25 25 25 25 75 0 75} и {75 25 100 25 100 75 75 75}, но я разочарован тем, что приведенный выше код вообще ничего не печатает. Может ли кто-нибудь дать мне некоторое руководство? Я прикрепил картинку, показывающую, что я хочу сделать. На самом деле, у меня уже есть все координаты точек для представления этого пончика, так что, может быть, я могу пропустить «функцию Difference()»? Если это так, трудная часть будет состоять в том, чтобы преобразовать пончик в прямоугольные сегменты. (Предположим, что все многоугольники здесь имеют прямолинейную форму.) Спасибо.