gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:21:55 28 4
gpt4 key购买 nike

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

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

编辑:澄清我不是在问如何发现两个圆是否相交。

最佳答案

要在 boost 中制作磁盘,可以使用缓冲区方法(有关 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]);

关于c++ - 使用 C++ boost 库如何创建两个圆并将它们添加到 boost R 树中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34969895/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com