一聚教程网:一个值得你收藏的教程网站

热门教程

南大通用GBase 8a之基于散列点集合获取最小覆盖圆的做法

时间:2026-08-19 20:43:50 编辑:袖梨 来源:一聚教程网

原文链接:www.gbase.cn/community/p…

更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

主要解决问题

(1)针对给定的散列点集合,获取能覆盖该集合的,面积最小的圆(圆心坐标和半径)

(2)在地理信息领域,通信领域,交通信息领域,消防、机器人技术, 体育竞技,流行病医学,气象检测等众多领域,可广泛应用。

部署方式

(1) 创建函数

新建create.sql文件,如下:use gclusterdb;dropfunction if exists f_mincir;createfunction f_mincir(point_str varchar(1000))returnsvarchar$$import subprocessresult= subprocess.check_output(["python", "/home/gbase/tmp/mincir.pyo", point_str]).strip()returnresult$$ language plpythonu;注: 下载mincir.pyo文件,将其部署在/home/gbase/tmp/mincir.pyo(可以自行指定存放位置),前提是每个coordinator节点都需要部署相同的位置。执行 gccli -uroot -vvv -f < create.sql 即可创建该函数

使用方式

(1) 新建包含散列点集合的表,其中x,y代表点的坐标

 gbase>select*from zhao;+---------+------+------+| pointid | x    | y    |+---------+------+------+|1|23|62||2|54|29||3|38|74||4|85|36||5|42|63||6|-5|18||7|-13|31||8|19|-41||9|28|62||10|54|49|+---------+------+------+10rowsinset (Elapsed: 00:00:00.01)

(2) 将点集坐标数据打包成元组后,直接调用函数

gbase>select gclusterdb.f_mincir(  group_concat( concat('(',x,',',y,')') )  )   from zhao;+------------------------------------------------------------------+| gclusterdb.f_mincir(  group_concat( concat('(',x,',',y,')') )  ) |+------------------------------------------------------------------+| (30.1517, 16.2271, 58.3035)                                      |+------------------------------------------------------------------+1rowinset (Elapsed: 00:00:00.07)注意:返回结果是一个包含3个元素的元组,元素12是面积最小的圆的圆心坐标,元素3是该圆的半径。

验证是否真的覆盖

(1) 将点集和所求的圆在画布上画出来, 可见该圆满足条件

参考文件

(1) 注: 该版本为centos8环境下编译。

(2) 文件下载:mincir.pyo

链接: pan.baidu.com/s/1LES7f39P… 提取码: ud1u

原文链接:www.gbase.cn/community/p…

更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

热门栏目