boost::geometry::Polygon 和“有向”折线的交集
Posted
技术标签:
【中文标题】boost::geometry::Polygon 和“有向”折线的交集【英文标题】:boost::geometry::intersection of Polygon and "directed" Polyline 【发布时间】:2019-05-28 11:06:24 【问题描述】:我需要找到折线和多边形的所有交点,以便折线从外部与多边形相交。我在所附图片上用粗点标记了这些点。
问题是 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 polyline0, -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)
【问题讨论】:
【参考方案1】:这就是我的做法:
对折线的每一段做:
仅获取此段的intersection
和多边形; (如果没有则continue
)。
使用within
检查起始终端是在多边形内部还是外部;
如果在内部,则将每个带有奇数索引的交叉点附加到输出;
如果在外部,则将带有偶数索引(和零)的每个交集附加到输出。
完成。
【讨论】:
您的想法是基于intersects
返回的交叉点已排序。但是intersects
能保证这一点吗?以上是关于boost::geometry::Polygon 和“有向”折线的交集的主要内容,如果未能解决你的问题,请参考以下文章