1

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

4

2 回答 2

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);

polygon将返回和之间的交点line,然后返回 和 之间line的交点other_line

另一方面,请注意

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

将返回line与 重叠的子部分polygon

于 2018-11-19T15:56:56.893 回答
0

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

那时我已经用向量解决了它,我有一个用于位置的向量和一个用于线的方向的向量,并根据给定的信息用另一条线计算出碰撞点。(使用 atan2 了解以弧度/度为单位的方向)

当我用一个对象(一个正方形)这样做时,我已经取了对象的 4 个角并计算了给定 Y 位置的线的位置(即正方形的顶部和底部的 Y 值)是否在 X 区域内广场。

我目前正在工作,所以我不能给你我使用的代码,但这应该让你对这种方法有一个粗略的了解。

我知道这不是您正在寻找的东西,但它可能对将来的参考有所帮助

于 2013-08-09T10:18:11.483 回答