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

前端之家收集整理的这篇文章主要介绍了c – boost :: geometry:使用圆圈的最近邻居前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用 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 && ./geom
Select point: 4
x: 4,y: 4
Select point: 5
x: 5,y: 5
Select point: 6
x: 6,y: 6
原文链接:https://www.f2er.com/c/110972.html

猜你在找的C&C++相关文章