计算二维空间某点的最近k 个点
2016-06-17 12:13
260 查看
计算多维空间——主要是二维空间——中最近点问题是GIS、游戏、计算机图形学中常遇到的问题。最近点问题包含但不局限于下面问题:
一维空间中距离点A 最近的一个点
一维空间中距离点A 最近的K 个点
一维空间中距离点A 小于D 的所有点
二维空间中距离点A 最近的一个点
二维空间中距离点A 最近的K 个点
二维空间中距离点A 小于D 的所有点
下面以问题 5. 二维空间中距离点A 最近的K 个点 为例,谈谈我的思路:
首先将二维距离变为一维距离,得到距离该点(红点)在一个坐标系上最近的1→i 个点,所对应的点的集合为Sx。下图是当i=3 时,距离最近的点:
同理,得到y轴上最近的1→i 个点,点的集合为Sy。
i 的大小从1 逐渐递增,每次计算集合Sx和集合Sy 的交集(Sx∩Sy),如果交集中的点w 是x、y坐标距离红点之和(△x+△y)第k 小的那个点,且满足约束条件:
△x+△y < max(Sx∪Sy)
那么停止i 的递增,在Sx和集合Sy 的交集(Sx∩Sy)中距离红点之和(△x+△y)中最小的k 个点即是平面上距离红点之和(△x+△y)最小的k 个点。当然约束条件可以进一步优化为:
△x+△y ≤ max(min(Sx)+max(Sy),min(Sy)+max(Sx))
因为二维平面距离之和(△x+△y)与距离([latex]\sqrt{\bigtriangleup x^2+\bigtriangleup y^2}[/latex])满足:
△x+△y ≥ [latex]\sqrt{\bigtriangleup x^2+\bigtriangleup y^2}[/latex]
那么距离红点最近的k 个点距离上限小于△x+△y。
最终,只需要在一个较小的集合Sx∪Sy 中遍历找到距离红点最近的k 个点就可以咯~~~
查看原文:http://blog.foool.net/2016/06/%e8%ae%a1%e7%ae%97%e4%ba%8c%e7%bb%b4%e7%a9%ba%e9%97%b4%e6%9f%90%e7%82%b9%e7%9a%84%e6%9c%80%e8%bf%91k-%e4%b8%aa%e7%82%b9/
一维空间中距离点A 最近的一个点
一维空间中距离点A 最近的K 个点
一维空间中距离点A 小于D 的所有点
二维空间中距离点A 最近的一个点
二维空间中距离点A 最近的K 个点
二维空间中距离点A 小于D 的所有点
下面以问题 5. 二维空间中距离点A 最近的K 个点 为例,谈谈我的思路:
首先将二维距离变为一维距离,得到距离该点(红点)在一个坐标系上最近的1→i 个点,所对应的点的集合为Sx。下图是当i=3 时,距离最近的点:
同理,得到y轴上最近的1→i 个点,点的集合为Sy。
i 的大小从1 逐渐递增,每次计算集合Sx和集合Sy 的交集(Sx∩Sy),如果交集中的点w 是x、y坐标距离红点之和(△x+△y)第k 小的那个点,且满足约束条件:
△x+△y < max(Sx∪Sy)
那么停止i 的递增,在Sx和集合Sy 的交集(Sx∩Sy)中距离红点之和(△x+△y)中最小的k 个点即是平面上距离红点之和(△x+△y)最小的k 个点。当然约束条件可以进一步优化为:
△x+△y ≤ max(min(Sx)+max(Sy),min(Sy)+max(Sx))
因为二维平面距离之和(△x+△y)与距离([latex]\sqrt{\bigtriangleup x^2+\bigtriangleup y^2}[/latex])满足:
△x+△y ≥ [latex]\sqrt{\bigtriangleup x^2+\bigtriangleup y^2}[/latex]
那么距离红点最近的k 个点距离上限小于△x+△y。
最终,只需要在一个较小的集合Sx∪Sy 中遍历找到距离红点最近的k 个点就可以咯~~~
查看原文:http://blog.foool.net/2016/06/%e8%ae%a1%e7%ae%97%e4%ba%8c%e7%bb%b4%e7%a9%ba%e9%97%b4%e6%9f%90%e7%82%b9%e7%9a%84%e6%9c%80%e8%bf%91k-%e4%b8%aa%e7%82%b9/
相关文章推荐
- position:absolute;的DIV 如何居中
- 算法与数据结构描述
- 使用VB6资源文件开发多国语言应用攻略
- [置顶] 融云后台服务创建token
- PS制作中国古代风格的封面
- 第三方包属性的定义(这里是以刷新库为例)
- spring mvc数据绑定
- 多进程单线程模型与单进程多线程模型之争
- Ionic Js十一:模态
- 明天软软onsite
- Eclipse中通过Tomcat运行J2EE项目java.lang.OutOfMemoryError: PermGen space的解决方案
- 学院引我走向新世界
- JAVA JDK1.5-1.9新特性
- [黑金原创教程] FPGA那些事儿《设计篇 II》- 图像处理前夕·续
- U3D前后端开发知识体系
- Android studio一些快捷键的使用介绍
- Android开发之JSON数据的格式问题
- 未通过ovf规范一致性或虚拟硬件合规性检查
- spring注解 总结
- php array