使用Boost.Geometry计算直线和多边形之间的交点

时间:2013-08-09 08:24:49

标签: c++ boost geometry boost-geometry

我想计算一条线和一条多边形或两条线等的交点。如何使用Boost.Geometry计算这个点?

2 个答案:

答案 0 :(得分:1)

this answer所暗示的那样,如果有人像我一样偶然发现了这个问题,bg::intersection执行的操作实际上取决于您提供的对象类型。

让我们定义

typedef bg::model::d2::point_xy<double> BPoint;
typedef bg::model::multi_point<BPoint> BMultiPoint;
typedef bg::model::multi_linestring<BLineString> BMultiLineString;

然后运行

BMultiPoint mp;
bg::intersection(line, polygon, mp);
bg::intersection(line, other_line, mp);

将返回polygonline之间的交点,然后返回lineother_line之间的交点。

另一方面,请注意

BMultiLineString mls;
bg::intersection(line, polygon, mls);

将返回linepolygon重叠的子部分。

答案 1 :(得分:0)

虽然我在大学时代从未使用过boost库,但我们不得不在一个非常基本的2D游戏引擎中进行这种计算。

我用矢量解决了它,我有一个位置矢量和一个线的方向,并根据给定的信息计算了另一条线的校正点。 (使用atan2以弧度/度数知道方向)

当我用一个物体(一个正方形)做到这一点时,我已经拍摄了物体的四个角并计算出在给定Y位置的线的位置(Y值是正方形的顶部和底部)是否在广场的X区域。

我目前在工作,所以我无法给你我使用的代码,但这应该让你大致了解这种方法。

我知道这不是您正在寻找的,但它可能对将来的参考有用