繁体   English   中英

使用Boost.Geometry计算线和面之间的交点

[英]Calculate intersection point between line and polygon with Boost.Geometry

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

如果有人像我一样偶然发现了这个问题,如该答案所示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之间的other_line

另一方面,请注意

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

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

尽管我在大学期间从未使用过Boost库,但我们必须在非常基本的2D游戏引擎中进行这种计算。

那时我已经用向量解决了这个问题,我有一个向量用于位置,一个向量用于一条线的方向,并根据给定的信息用另一条线计算了大肠菌病点。 (使用atan2以弧度/度为单位知道方向)

当我对一个对象(一个正方形)执行此操作时,我已经获取了该对象的4个角,并计算了在给定的Y位置处的线的位置(Y值位于正方形的顶部和底部)是否在X的X区域内广场。

我目前正在工作,所以我不能给您我使用的代码,但这应该可以使您大致了解该方法。

我知道这并不完全是您要找的东西,但可能对将来的参考有所帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM