我正在尝试进行一个简单的2d'物理'模拟,主要涉及圆形物体的碰撞,为了避免编程我自己的空间索引(四叉树/ r树/等),我希望使用Boost的R -树。
问题在于我在Boost文档中找不到任何关于如何创建圆形形状(或者甚至是否可能)的文档或示例。有很多关于创建任意多边形对象的文档。这是否可以使用Boost几何库,如果是这样,那么如何进行呢?
编辑:澄清我并没有询问如果两个圆相交,我怎么发现。
答案 0 :(得分:0)
要使磁盘升压,可以使用缓冲方法(有关doc和buffer 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]);