Мне нужно найти все точки пересечения полилинии и многоугольника, чтобы полилиния пересекала многоугольник снаружи. Я отмечал такие точки жирными точками на прикрепленной картинке.
Проблема в том, что boost::geometry::intersection
возвращает все точки пересечения, и мне нужно как-то проверить тип пересечения.
Вот небольшой пример использования boost::geometry::intersection
:
BOOST_GEOMETRY_REGISTER_POINT_2D(Eigen::Vector2d, double, cs::cartesian, x(), y())
BOOST_GEOMETRY_REGISTER_POINT_3D(Eigen::Vector3d, double, cs::cartesian, x(), y(), z())
BOOST_GEOMETRY_REGISTER_LINESTRING(std::vector<Eigen::Vector2d>)
BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING(std::vector<std::vector<Eigen::Vector2d>>)
using Point = Eigen::Vector2d;
using Polyline = std::vector<Point>;
using Polygon = boost::geometry::model::polygon<Point>;
Polyline polyline{{0, -10}, {0, 10}};
Polygon polygon;
std::vector<Point> polygon_points{{-1., 1.}, {1., 1.}, {1, -1}, {-1, -1}, {-1, 1}};
boost::geometry::assign_points(polygon, polygon_points);
std::vector<Point> intersection_points;
boost::geometry::intersection(polygon, polyline, intersection_points);
for (const auto& p : intersection_points) {
std::cout << p << std::endl << std::endl; // here we have 2 points, but I need only one (0, -1)
}