我需要找到折线和多边形的所有交点,以使折线从外部与多边形相交。我在所附图片上用粗体点标记了这些点。
问题是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)
}
答案 0 :(得分:0)
这就是我要做的:
对折线的每个线段执行
仅获取此线段的intersection
和多边形; (如果没有,则continue
)。
使用within
检查起始端子在多边形内部还是外部;
如果在内部,则将每个具有奇数索引的交集附加到输出;
如果在外面,则将每个具有偶数索引(和零)的交集附加到输出。
完成。