使用 boost 库查找交点

Posted

技术标签:

【中文标题】使用 boost 库查找交点【英文标题】:Finding intersection point using boost library 【发布时间】:2016-04-28 11:01:31 【问题描述】:

我想计算一些线段和盒子之间的交点。不幸的是,我在 boost 库中没有找到这样的功能。 我有这样的事情:

using boost::geometry;
using Point = model::point<double, 3, cs::cartesian>;
using Box = model::box<Point>;
using Line = model::segment<Point>;

index::rtree<Box, index::quadratic<16>> rtree;

...

//EDIT
std::vector<std::vector<Point>> getIntersection(Line line)
    std::vector<Box> boxes;

    rtree.query(index::intersects(line), std::back_inserter(boxes));

    std::vector<std::vector<Point>> result;
    for(const auto&box: boxes)
        std::vector<Point> points;
        intersection(line, box, points); // can't compile
        result.push_back(points);
    

    return result;

所以你看我当前返回了包含在rtree 中的所有相交框。 交叉点检测工作正常,但我还需要知道它在哪里。 可悲的是我根本不能使用点向量。 那么,有谁知道如何理解这一点?

编辑:

我添加了intersection 函数。现在虽然我通过直观的好论据它不编译。看起来没有解决方案,因为根据给定的错误函数没有为此类类型实现。

【问题讨论】:

【参考方案1】:

我认为您可以进一步使用您收集的框并找到与该功能的交点:

template<typename Geometry1, typename Geometry2, typename GeometryOut>
bool intersection(Geometry1 const & geometry1,
                  Geometry2 const & geometry2,
                  GeometryOut & geometry_out)

查看Boost documentation中的示例

【讨论】:

以上是关于使用 boost 库查找交点的主要内容,如果未能解决你的问题,请参考以下文章

Boost几何:使用开区间的交叉点

使用 Boost 在 XML 中查找密钥

Boost Geometry:多边形和盒子的交集

Linux下使用CMake进行编译的时候寻找Boost库

VS2015编译使用Boost库遇到的问题及正确编译使用教程

boost::geometry::Polygon 和“有向”折线的交集