c – boost :: geometry:使用圆圈的最近邻居

c – boost :: geometry:使用圆圈的最近邻居,第1张

概述我正在使用 Rtree实现的boost :: geometry来存储(很多)2D点.现在我需要做距离最近的neigbour查询. 然而,手册only describes queries为矩形框(即“获取我在这个矩形内的所有点”)或“KNN”查询(“从这里得到我最近的”n“点). 我想要的就是“给我一些距离小于’n”的点数. 我注意到你可以定义一个一元的谓词,但是是一元的(因此,不适合两点的条件). 我正在使用 Rtree实现的boost :: geometry来存储(很多)2D点.现在我需要做距离最近的neigbour查询.

然而,手册only describes queries为矩形框(即“获取我在这个矩形内的所有点”)或“KNN”查询(“从这里得到我最近的”n“点).

我想要的就是“给我一些距离小于’n”的点数.

我注意到你可以定义一个一元的谓词,但是是一元的(因此,不适合两点的条件).

手册记录了我以前认为可能适合一个圆圈的一些model::ring课程,但它实际上更像是一种分段线(多边形).这个假设是否正确?

是否有另一种方法来处理这样的查询?还是根本不可能?

解决方法 last example in the documented “User-defined queries”显示了如何在谓词中使用lambda.此lambda可以绑定范围中的其他变量,例如,您要查找的邻居点.

这是一个小例子.该示例查找距离(5,5)更接近于2个单位的点,用于位于直线y = x处的点的集合.如果搜索点在R树中,或者将其直接从R树中取出,那么首先要检查它是否容易进行修改.

#include <iostream>#include <boost/geometry.hpp>#include <boost/geometry/geometrIEs/point.hpp>#include <boost/geometry/index/rtree.hpp>namespace bg = boost::geometry;namespace bgi = boost::geometry::index;typedef bg::model::point<float,2,bg::cs::cartesian> point;typedef std::pair<point,unsigned> value;int main(int argc,char *argv[]){    bgi::rtree< value,bgi::quadratic<16> > rtree;    // create some values    for ( unsigned i = 0 ; i < 10 ; ++i )    {        point p = point(i,i);        rtree.insert(std::make_pair(p,i));    }    // search for nearest neighbours    std::vector<value> returned_values;    point sought = point(5,5);    rtree.query(bgi::satisfIEs([&](value const& v) {return bg::distance(v.first,sought) < 2;}),std::back_inserter(returned_values));    // print returned values    value to_print_out;    for (size_t i = 0; i < returned_values.size(); i++) {        to_print_out = returned_values[i];        float x = to_print_out.first.get<0>();        float y = to_print_out.first.get<1>();        std::cout << "Select point: " << to_print_out.second << std::endl;        std::cout << "x: " << x << ",y: " << y << std::endl;    }    return 0;}

通过OS X上的Macports安装的Boost进行编译和运行:

$c++ -std=c++11 -I/Opt/local/include -L/opt/local/lib main.cpp -o geom && ./geomSelect point: 4x: 4,y: 4Select point: 5x: 5,y: 5Select point: 6x: 6,y: 6
总结

以上是内存溢出为你收集整理的c – boost :: geometry:使用圆圈的最近邻居全部内容,希望文章能够帮你解决c – boost :: geometry:使用圆圈的最近邻居所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1257059.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存