带角度的快速二维近邻搜索。

flanders的Python项目详细描述


https://travis-ci.org/bast/flanders.svg?branch=masterhttps://img.shields.io/badge/license-%20MPL--v2.0-blue.svg

弗兰德斯:快速二维近邻搜索,角度

                                                    `.-:://////:-.`
                                             `-/oyhddddmmddddddNmdmdhs/`
                                          -ohddddddddddddNddddddNddddmmds.
                                        `hmmmmmdddddddddddNddddmmddddmmddm.
                                       `hddddddmmddddddhyyysoossyhdmNmdddNs
                                       sddddddddmmho/:-------------:odmmmmo
                                      :mddddddddd+-------------------:hddd.
                                      dddddddddm+---------------------:ms.
                                     :mddddddddd-----------------------s/`
                                     yddddddddds------------------------:s
                                    `mddddddddm+-----://////+/:---://////y`
                                    -Nddddddddm/----+:`     `./+-+-`    `.+:
                                    /mddddddddN:---o`          -d-    -.   o-
                                    omddddddddN////y  -d/      `m.    y+   +:
                                    sdddhhNmmmN+/::o: `-`     `+so++//:. `:+`
           `---.                    ydd+::mdddm:----/+-.````-:+:------:+s/-
           o/::/+-                  sN:-oomdddm+------://+///:---------:s
   `.-.`   s-----+/`                oN:---smddds------------:+oyhhysssydhs:.
  -o/://+-`.o:----/o`               /mh:---hyyy/----------+hdmmmmdddddmmmddho.
  /+-----:+/-o:----:+`       `..    .mddyyydo-----:///::ohdmmdmmdmddNdmmdmmddd/
   :+/-----:+/y-----:+-`  .:+///+.   dddddddd----:mMMNNddddddmddmdddmmdmddmdddm:
   ``-/+:----::-------:/+++:----/+   +mdddddN----:MMMMMNmmmmmmmdddddddhhhhhys+/.
.////+//+o:--------------/-----/o`    sdddddm/----oNmdmNNNNMMMm//os--...``
y:-----:/+o------------------:o:       :ydddm+-----:oyyyysydMMm:::o+.
:o/:----------------+o:-----:s`          .::+o--------://++oooo+:--:s
  -:/+/:--------------s/----s.              -o------------------:/o+.
      `-/+o------------/---+d-             `+o------------------::h
          .s/---------:::ohhhs             y.-++:-----------------d:`
           dhys+///+oyhhhhyhm/            `s````:/++o+//:::://+++/-.s.
          /dddhhhhhhyyhhhddhym`           -s`````````..-:::/h/s-````.s`
         :dyyhddddddddddhyyyym           `ydy-`````````````s:.-o/````sy/-`
         yyyyyyyyyyyyyyyyyyyhs     `./+ooymhyhy/.`````````:o....++``:dmdhhhso:`
         dyyyyyyyyyyyyyyyyyym:`-/oyddhyyyyhddyyhhs+-``````hso++ohd++dyyddyyyyhhyo/`
         myyyyyyyyyyyyyyyyyyNhhhyyyyyyyyyyyyddyyyyyhdyso++ddhmhmddhhyyyyddyyyyyyyhdy+.

使用pip

安装
$ pip install flanders

示例

在本例中,我们有6个点(编号为0到5)和两个参考 具有一定的视图向量和视图角度的点。第一次引用 点找到点2。第二个参考点找不到任何 视角内的邻居并返回-1。

https://github.com/bast/flanders/raw/master/example/flanders.png
importflanderspoints=[(60.4,51.3),(173.9,143.8),(132.9,124.9),(19.5,108.9),(196.5,9.9),(143.3,53.3)]num_points=len(points)context=flanders.new_context(num_points=num_points,points=points)indices=flanders.search_neighbors(context=context,coordinates=[(119.2,59.7),(155.2,30.2)],view_vectors=[(0.0,1.0),(-1.0,-1.0)],angles_deg=[90.0,90.0])assertindices==[2,-1]flanders.free_context(context)

如果忽略视图矢量和角度,代码将搜索 不考虑任何角度的最近邻居:

indices=flanders.search_neighbors(context=context,coordinates=[(119.2,59.7),(155.2,30.2)])assertindices==[5,5]

不必搜索坐标的近邻,您还可以 按点的最近邻按其索引搜索:

indices=flanders.search_neighbors(context=context,ref_indices=list(range(num_points)),view_vectors=[(1.0,1.0)for_inrange(num_points)],angles_deg=[90.0for_inrange(num_points)])assertindices==[2,-1,1,2,-1,1]

对于调试,您可以使用简单而缓慢的实现:

indices=flanders.search_neighbors(context=context,coordinates=[(119.2,59.7),(155.2,30.2)],view_vectors=[(0.0,1.0),(-1.0,-1.0)],angles_deg=[90.0,90.0],naive=True)assertindices==[2,-1]

效率考虑因素

如果计算许多点的近邻,最好是 发送一整批点,而不是逐点计算。 如果发送整个批处理,代码将共享内存并行化 在点上的循环。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么运行按钮在Eclipse中不起作用?   java构造函数:实例变量是否为对象存储单独的值?   java使用jquery获取值   生产文件夹和源文件夹中的java单元测试   java递归问题这个解决方案正确吗?有更简单的解决方案吗?   java Android sqlite正在检索已选中中的行   javacom。谷歌。云数据存储。DatastoreException:请求缺少必需的身份验证凭据   java无法在Linux Ubuntu 12.04上运行maven2   在监视器的上下文中,被阻塞的线程在被notify()调用唤醒后在何处继续执行?   安卓如何从游标获取Bool(Java SQLite)   如何阻止rxjava runnable发出?   使用设备管理时应用程序中的java Android实例化异常