微分射线法判定点与封闭图形位置关系的方法与流程

文档序号:17320946发布日期:2019-04-05 21:32阅读:926来源:国知局
微分射线法判定点与封闭图形位置关系的方法与流程

本发明涉及地理信息系统gis应用中,快速识别地图上的点和任意封闭图形位置关系的方法。



背景技术:

判定点是在多边形区域内还是在多边形区域外,这种位置关系的获得是导航、高精度定位、自动驾驶等领域的重要技术,在交通、科研上运用广泛;例如共享单车、共享汽车的租赁业务活动中,需要判断单车、汽车是否进入禁止停车区域,一旦判断进入禁停区域且用户准备停车,运营企业需采用提示报警、无法结束业务等手段来提醒使用者驶离。

一般是根据拓扑学的射线法来实现对点和多边形关系的判定,如附图1所示:

基于该点做一条射线,逐个计算多边形的所有边与射线是否相交,如果相交次数为奇数,则判定点在多边形内,如果相交次数为偶数或者为0,则判定点在多边形外,如附图1:

1:绿色点向右做的射线与多边形的各边的相交次数为4,为偶数,判定该点在多边形的外部;

2:1、2之间的点,向右做射线,与多边形的相交次数分别在2、3、4,为奇数,判定该点在多边形的内部。

对于边数为n的多边形,上述传统射线法需要进行每条边与射线进行计算,判定是否相交,n条边逐个都要比较,时间复杂度为o(n);浪潮通信信息系统有限公司申请的《201510255047.7》专利、阿里巴巴集团控股有限公司申请的《cn201810029493.x》专利对上述射线法做了改进,但没有避免对点或者线段的逐个判断,复杂度并没有数量级上的优化,上海卓易科技股份有限公司申请的《201610242654.4》专利对射线法做了较大程度的改进,时间复杂度降低到o(㏒n),是较优秀的方案。



技术实现要素:

现提供一种快速判定点与多边形关系的方法,其时间复杂度为o(1),与边数n没有相关关系,在复杂图形、精密度要求较高的计算场合,性能较传统方法和上述专利提供的方法有较大提升。

本发明的数学思想,来自于牛顿-莱布尼茨的微分学理论,拓扑学的射线法规则,以及图形测量学的一般规则。同时运用了计算机学科的数据结构和算法的知识。

微分射线法判定点与封闭图形位置关系的方法,其实施过程为:

1:利用微分思想将图形转换成点连接组成的多边形,这些点被称为线上点,其特征是:位于图形线上,投射到x轴上的坐标值等距(△x)。新建数据结构来保存线上点的信息;

2:将射线法的射线-线段关系判断,转换成待查点-线上点构成数据结构之间的值查找和比较计算,得出射线法所需要的相交次数值;

3:根据相交次数值的奇偶性,由射线法的通用规则,得出待查点和多边形的位置关系。

附图说明

附图1射线法的图形描述。

附图2用线上点连线成多边形来描述一般曲线图形。

附图3本发明的数据结构:线上点坐标值组成的“查找表-数组”。

附图4待查点在查找表上没有找到对应的x坐标值。

附图5待查点在查找表上找到了对应的x坐标值,且大于其y值的点的个数为偶数。

附图6待查点在查找表上找到了对应的x坐标值,且大于其y值的点的个数为奇数。

具体实施方式

二维x-y笛卡尔直角坐标系中的任何封闭图形,例如矩形、三角形、菱形、平行四边形、圆形、椭圆,以及其他不规则的封闭图形,都是由曲线线段(直线线段是曲线线段的一种特殊形式)组成的。而曲线线段可以使用微分方法,用曲线上的特定点(以下简称线上点)的逐个连线来模拟,这些点的特征是:在x轴上等间隔△x。根据微分学极限的思想,只要△x足够小,lim(△x—>0),特定点的连线将无限的逼近原有曲线。使用特定点的连线组成的多边形,将更接近于原始图形。下面将以二维坐标系上一个典型的封闭图形:椭圆为例来阐述本发明。如附图2,在特定△x值的情况下,图上椭圆可以描述为12个线上点的连线组合的多边形。这12个点分别是(x1,y1)、(x1,y2)、(x1+△x,y3)、(x1+2△x,y4)、(x1+3△x,y5)、(x1+4△x,y6)、(x1+5△x,y7)、(x1+5△x,y8)、(x1+4△x,y9)、(x1+3△x,y10)、(x1+2△x,y11)、(x1+△x,y12)。

根据测量的原理,如果△x足够小,测量时以△x为精度的话,待判定的任意点t(以下简称待查点,坐标为xt、yt)的x轴坐标值xt,都可以被测量成一个基准值x1+△x的整数倍。

本发明的思路是,利用存储空间换取时间性能的提升。根据微分法,封闭图形上曲线转换成x轴上等间隔的线上点组成的多边形,射线法中的射线特殊化为垂直于x轴向上的射线,将传统射线法中射线-线段相交判断,转换为待查点与线上点构成数据结构的查找-数值比较判断,继而找到射线和图形的相交点数,从而根据射线法的规则,确定点和图形的位置关系。

程序一般包含数据结构和算法。本发明准备数据结构的方法是:将封闭图形转换成线上点的集合,并按如下规则存入存储介质:存储线上点里面x最大值xmax、最小值xmin;存储x值相同的线上点,将其y坐标轴顺序存为一个数组;以前述椭圆为例,线上点组成的数据结构如下:

xmax为x1+5△x,xmin为x1;

y2和y1顺序存储成一个数组,对应着关键值x1;

y3和y12顺序存储成一个数组,对应着关键值x1+△x;

y4和y11顺序存储成一个数组,对应着关键值x1+2△x;

y5和y10顺序存储成一个数组,对应着关键值x1+3△x;

y6和y9顺序存储成一个数组,对应着关键值x1+4△x;

y7和y8顺序存储成一个数组,对应着关键值x1+5△x;

在存储介质上另外用数组的形式建立一个查找表(以下简称查找表),该表顺序的存储着具体x值对应的数组首地址:

第1个节点指向关键值x1对应的数组;

第2个节点指向关键值x1+△x对应的数组;

第3个节点指向关键值x1+2△x对应的数组;

第4个节点指向关键值x1+3△x对应的数组;

第5个节点指向关键值x1+4△x对应的数组;

第6个节点指向关键值x1+5△x对应的数组;

生成的数据结构见附图3。

本发明的算法,要判定(xt,yt)该点是否在封闭图形内,首先根据待查点的x坐标值xt,在顺序查找表里检索,看是否有对应的x坐标值:

如果xt大于xmax(即x1+5△x)或者xt小于xmin(即x1)

那么,t在查找表上没有对应的x坐标值;

否则,

t在查找表上有对应的x坐标值。

如果t在查找表上没有对应的x坐标值,如附图4,大圆点为(xt,yt),xt小于xmin。说明以待查点为起点,做平行于y轴方向做射线,无论是向上还是向下,均与图形任何线上点无相交。根据射线法的规则,该待查点在图形外部。

如果t在查找表上有对应的x坐标值,说明待查点所在的垂直于x轴的直线,与图形有相交点。此时根据射线法的规则,沿着该待查点,沿着y轴向上做的射线,判断和图形交点数目,即可得到图形和待查点的关系;为得到交点数目,本发明逐个比较xt所对应数组内各个线上点的y值和待查点的y值的大小:

如果大于待查点的y值的线上点有偶数个或者0个,说明沿着该待查点,沿着y轴向上做的射线与原图有偶数个或者0个相交点,根据射线法的规则,该待查点在图形外部。

如果xt所对应数组中大于待查点的y值的线上点有奇数个,说明该射线与原图有奇数个相交点,根据射线法的规则,该待查点在图形内部;

如附图6,待查点坐标(xt,yt),xt等于x1+△x,则在查找表上找第二个节点,并找到对应的y值数组,该数组中有y3、y12两个y值,经比较,y3大于yt,y12小于yt,说明沿着该待查点,平行y轴向上做的射线与原图有1个相交点(x1+△x,y3),1为奇数,根据射线法的规则,该点应在图形内。

将上述x-y坐标系替换为y-x坐标系、经纬度坐标系,或者变换成三维坐标系,或者将比较大于yt的计算改为小于yt的计算,只要是满足如下2个特征均应视为本发明的衍生形式,在本发明所保护的范围内:

1:利用微分法将图形分解成某坐标轴上等距的线上点组成的多边形,不论是否运用本发明给出的数据结构;

2:将射线法的射线-线段关系判断,转换成点-线上点构成数据结构之间的坐标值查找、比较得出射线法所需要的相交次数值,不论是否运用本发明给出的算法。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1