使用C ++ boost库如何创建两个圆并将它们添加到boost R-tree中?

时间:2016-01-23 22:48:02

标签: c++ boost boost-geometry

我正在尝试进行一个简单的2d'物理'模拟,主要涉及圆形物体的碰撞,为了避免编程我自己的空间索引(四叉树/ r树/等),我希望使用Boost的R -树。

问题在于我在Boost文档中找不到任何关于如何创建圆形形状(或者甚至是否可能)的文档或示例。有很多关于创建任意多边形对象的文档。这是否可以使用Boost几何库,如果是这样,那么如何进行呢?

编辑:澄清我并没有询问如果两个圆相交,我怎么发现。

1 个答案:

答案 0 :(得分:0)

要使磁盘升压,可以使用缓冲方法(有关docbuffer function的详细信息,请参见strategies

// boost namespace and types
namespace bg  = boost::geometry;
typedef bg::model::d2::point_xy<double> BPoint;
typedef bg::model::polygon<BPoint> BPolygon;
typedef bg::model::multi_polygon<BPolygon> BMultiPolygon;

// declare all buffer strategies
int points_per_circle(10);
bg::strategy::buffer::join_round join_strategy(points_per_circle);
boost::geometry::strategy::buffer::end_flat end_strategy;
bg::strategy::buffer::point_circle circle_strategy(points_per_circle);
bg::strategy::buffer::side_straight side_strategy;

// set the distance strategy
double radius = 20;
bg::strategy::buffer::distance_symmetric<double> distance_strategy(radius);

BPoint center = BPoint(0, 0);
BMultiPolygon tmp;  // buffer generates multipolygons
BPolygon disk;

// make disk centered on `center` and of correct `radius`
bg::buffer(start, tmp, distance_strategy, side_strategy,
           join_strategy, end_strategy, circle_strategy);

// convert the MultiPolygon output to a simple polygon
disk = BPolygon(tmp[0]);