一种计算机上使用简化求交计算的点在多边形内判定方法与流程

文档序号:22881799发布日期:2020-11-10 17:45阅读:188来源:国知局
本发明属于计算机算法、计算机图形学、计算几何、地理信息系统处理领域,具体说是一种涉及点在多边形内判定计算的方法,即:对于一个点的空间位置,判断该位置是否位于一个多边形所限定的空间区域内的方法。
背景技术
::点在多边形内的判定计算,是计算机图形学、计算几何、地理信息系统处理中的一种基础计算技术,就是对于一个多边形而言,任一个测试点,要判断该点是否位于该多边形内。这方面的工作很多,其中使用比较广泛的有射线法和基于均匀网格划分的方法。射线法,就是从测试点发出一条射线,统计它与多边形的边的相交次数。如果相交次数为偶数,则测试点在多边形外;否则,在内。射线法要与多边形的每条边进行求交测试,其计算复杂度为o(n),这里n为多边形的边的数目。为降低计算复杂度,提出了多种方法,先对多边形进行一定的预处理,如将多边形划分成梯形或凸多边形,然后可快速定位测试点所位于的局部区域,再根据局部区域的情况进行判断计算。这类方法可减少需要检测的多边形的边数,计算复杂度可降至o(logn)。但这类方法的预处理比较麻烦。为此,均匀网格方法提出,对多边形的包围盒进行与坐标轴对齐的矩形网格划分,由此可进行简单的预处理,也可将测试点的检测限定于所在网格单元邻近的局部区域进行。经过对多种方法进行对比后,均匀网格方法是适于实际应用的高效的点在多边形内判定计算方法。进一步,提出了将射线法与均匀网格法相结合的方法,先计算各个网格交点位于多边形内/外的属性,然后将测试点与其所在网格单元的网格交点进行连线,就可局部化地使用射线法进行点在多边形内的判定计算。由于一个网格交点与多个网格单元相关,这几个网格单元中的多边形的边都要进行检测。为此,一些方法提出,先计算每个网格单元中心点位于多边形内/外的属性,然后将测试点与其所在网格单元的中心点进行连线处理,并改进了网格中心点位于多边形内/外属性的判定计算方法和网格分辨率的优化处理,以及对一些歧义情况进行鲁棒处理的方法,它们可将均匀网格方法的预处理的计算复杂度降至o(n),将测试计算的复杂度的期望值降至o(1)。虽然射线法与均匀网格法的结合将计算复杂度降至最低了,但其基本的测试射线与多边形的边的求交运算依然有较多的乘法、加法等计算,对于计算机处理器而言,计算代价还是比较高。技术实现要素:为了解决上述技术问题,本发明提出一种计算机上使用简化求交计算的点在多边形内判定方法,以简化求交计算,并便于高效使用计算机的并行处理能力,由此提高点在多边形内的判断计算效率。本发明对射线法与网格法的结合进行进一步的改进。首先,将测试点发出的射线固定为平行于一个坐标轴的方向,这样就可预先知道交点的一个坐标,降低射线与多边形的边的求交计算复杂性。同时,对网格单元内的多边形的边的片段进行条状结构的管理,使得每个条状结构中的边均可能与位于该条状结构中的射线相交,这样,网格单元中大量与射线无相交的边将无需与射线进行求交计算,并且,这样也有利于使用gpu进行并行计算以更好地提高效率,因为无需进行费时的分叉处理以判断射线是否与边可能相交。本发明的技术方案,为一种简化求交计算的点在多边形内判定方法,包括以下步骤:步骤(1)将多边形的顶点坐标读入计算机内存,以生成多边形的包围盒,使得包围盒的边界均位于多边形外;对多边形的包围盒进行与坐标轴对齐的均匀网格划分,依据多边形的边与x轴或y轴平行的网格线的交点将这些网格线划分成许多片段,并判断并记录各个网格线片段位于多边形内/外的属性;步骤(2)在每个网格单元中生成条状结构,以管理网格单元中所含的多边形的边片段,在此,一个条状结构是由平行于y轴或x轴的边作为边界构成,使得其中的多边形的边片段与该条状结构的两端边界均相交;步骤(3)输入测试点进行检测时,利用单独处理器或并行的多个处理器,对于每一个测试点,从其发出一条平行于y轴或x轴射线,由近至远逐步计算其与x轴或y轴平行网格线的交点,直至该交点位于多边形内/外的属性能够由其所在的网格线的片段位于多边形内/外的属性获知,此时,终止射线的前行;步骤(4)将要用到的相关条状结构调入,在单独处理器或并行处理器中,进行点在多边形内的判断计算;此时,对于从一个测试点发出的射线,计算其与所经过的条状结构中的多边形的边的相交情况,统计该射线与多边形的边的相交次数;步骤(5)根据步骤(3)和(4)的结果,得知测试点位于多边形内/外的属性。进一步的,所述步骤(1)对网格线被其与多边形的边的交点所划分的片段位于多边形内/外属性的判断,其步骤是如下:(1.a)将一条网格线可看作是从其最外端的一个点发出的一条射线,并与多边形的边进行求交而得到这条网格线与多边形的边相交情况;(1.b)网格线的最外端的点是位于多边形外的。同时,根据点在多边形内判断计算的射线法,可知相邻的网格线片段位于多边形内/外的属性是交替变化的,由此,可知网格线上各个片段位于多边形内/外的属性。进一步的,所述步骤(2)对于每个网格单元中的多边形的边片段,建立条状结构进行管理,其步骤如下:(2.a)对于一个网格单元中的边片段,根据它们位于该网格单元中的端点的x或y坐标值,生成许多平行于y或x坐标轴的平行线,由这些平行线作为边界将该网格单元剖分成许多条状结构;(2.b)每个条状结构记录其所包含的边,无需记录该边片段的端点的坐标。进一步的,所述步骤(3)对一个测试点进行测试时发出的射线是与条状结构的边界边平行的。进一步的,所述步骤(3)对从测试点发出的射线与网格线进行由近至远的求交时,判断该交点位于多边形内/外的属性是否可由其所位于的网格线片段位于多边形内/外的属性来获知,并由此决定射线是否停止前进;如果可获知,则该射线停止前进;否则,该射线要继续往前与后续网格线进行求交处理。进一步的,所述步骤(4)对一条测试用的射线与其经过的每个条状结构中的多边形的边进行求交测试时,无需在求交点前进行该边是否与射线相交的检测,因此便于使用计算机的并行能力,如减少使用gpu时的费时的分叉处理。计算射线与一条边的交点时,该交点的一个坐标值是已知的,就是该射线所垂直的坐标轴的坐标值;通过判断交点的另一个坐标值与测试点的另一个坐标值的大小,即可知射线与该边是否真的相交。进一步的,所述步骤(5)中综合步骤(3)和(4)的结果,得到测试点位于多边形内/外的属性,其处理如下:(5.a)如果射线终止前行时与网格线的交点位于多边形内,则射线与多边形的边相交次数为偶数时,测试点位于多边形内;否则,在外;(5.b)如果射线终止前行时与网格线的交点位于多边形外,则射线与多边形的边相交次数为偶数时,测试点位于多边形外;否则,在内。有益效果:本发明能极大的节省求交计算中的乘法、加法等运算,并能高效使用计算机的并行处理能力如gpu等,可大幅提高点在多边形内的判定计算效率。附图说明图1为多边形的边与网格线进行求交计算,然后根据交点情况,对水平网格线的片段进行其位于多边形内/外属性的判定。同时,对各个网格单元进行条状结构的组织,以有效管理各个网格单元中的边片段;图2为测试点发出射线与水平网格线求交、并计算射线与所经过的条状结构中的边相交的情况,由此,可判定测试点是否位于多边形内;图3为射线与多边形的边共线、或射线经过多边形的顶点时,射线与多边形的边相交统计处理方法;图4为用于测试的4个多边形,(a)边数很少的多边形;(b)边数不多且分布较均衡的多边形;(c)边数很多但分布不均衡的多边形;(d)边数很多且分布较均衡的多边形。图5为本发明方法的流程图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述。显然,所描述的实施例仅为本发明的一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域的普通技术人员在不付出创造性劳动的前提下所获得的所有其他实施例,都属于本发明的保护范围。本发明是一种使用计算机简化求交计算的点在多边形内判定方法,能够用于工程中诸多场景,比如说,在地理信息系统中,对于一个区域的道路、楼房、公园等以多边形方式进行区域限定;当要对某些目标进行定位时,如某辆汽车是否位某条道路上、或位于某个公园内等,则可使用本发明进行快速检索。或者,当洪水浸漫一个城市时,洪水覆盖的区域可用多边形表达,则使用本发明可快速知道哪些位置还没有被洪水覆盖、是安全的。根据本发明的一个实施例,不失一般性,本发明将条状结构和测试用的射线均按照平行y轴的方向生成,且射线是从测试点向上射出(其y坐标逐步增大的方向),如图1所示。根据本发明的一个实施例,本发明上述方法分二个阶段:第一阶段对多边形进行预处理;第二阶段:根据预处理结果,判定一个测试点是否位于多边形内。第一段的工作步骤如下:1)检测多边形所有顶点的x坐标和y坐标,得到最小的x坐标、最小的y坐标、最大的x坐标和最大的y坐标。然后将最小x坐标和最小的y坐标均各自降低预定数值,将最大的x坐标和最大的y坐标均各自增大预定数值,由此得到该多边形的包围盒,且包围盒的边界均位于多边形外。2)对包围盒进行网格分辨率优化的均匀网格剖分。根据“jingliandwenchengwang.2014.point-in-polygontestsbyapplyingtheraycrossingmethodlocallyviagridcenterpoints.internationaljournalofelectricalengineering21,3(2014),85–92.”中的方法计算每个网格单元沿x、y轴方向的长度mx和my分别为:mx=k*sqrt(m*w/h),my=k*sqrt(m*h/w)这里,k为一个经验系数,一般设k=1;w和h分别为包围盒的宽度和高度;m为根据“borutandivanakolingerova.2001.acell-basedpoint-in-polygonalgorithmsuitableforlargesetsofpoints.computers&geosciences27,10(2001),1135–1145.”得到的网格单元总数,一般约为n,这里n为多边形的边数。3)对每一条多边形的边,计算其与平行x轴的网格线的交点的x坐标,在此可根据相邻平行x轴的网格线之间的间距相等的特点,运用迭代加法,逐步地求得各个交点的x坐标。如图1中所示,边ab与平行x轴的网格线的交点的坐标x1与x2的间隔、x2与x3的间隔是相等的。4)根据多边形的边与平行x轴的网格线的交点,每条平行x轴的网格线被划分成许多片段;这些片段位于多边形内/外的属性,可依据射线法得到,并记录。此时,对于多边形的边与平行x轴的网格线共线的情况,其在网格线上独自为一个片段,其位于多边形内/外属性标记为“歧义”。5)根据多边形的边与网格线的交点,可知各个网格单元有哪些多边形的边的片段;这些边的片段的端点的x坐标,要么是边与平行x轴的网格线交点的x坐标,要么就是平行y轴的网格线的x坐标。根据这些端点的x坐标,生成平行y轴的垂直线作为条状结构的分界边线,以得到该网格单元的条状结构划分结果,并在各个条状结构中记录所包含的边(无需记录这些边片段的端点坐标)。一个条状结构的上端边界位于多边形内/外的属性,就是其位于所在平行x轴的网格线上的片段位于多边形内/外的属性,因为其上端边界一定是位于该网格线的一个片段内。如图1中包含c点的网格单元,被划分成3个条状结构。在第二阶段的工作步骤如下:(1)根据测试点的x坐标,生成一条平行y轴的向上的射线。(2)由近及远地计算射线与平行x轴的网格线的交点,直至该交点位于多边形的内/外属性可知为止。(3)对射线经过的每个条状结构,检测射线与其中的边的相交情况。此时,交点的x坐标是已知的,只需计算交点的y坐标,由边的线方程与射线的x坐标即可求取。如果所得y坐标比测试点的y坐标小,则该边位于测试点下方,不会与射线相交;否则,就是一个真实的交点。如果是真实相交的,则统计相交次数增加1次;否则,不是真实相交情况,则不予统计。对于射线经过多边形的顶点或与多边形的边共线的情况,其相交情况统计按照图3中所示的方式进行:3.1)如果射线所经过的多边形的一个顶点,其关联的2条边位于射线的同一侧,则该顶点相关的2条边均不进行统计处理;否则,该顶点相关的2条边,统计为射线与多边形的边相交1次。3.2)如果射线与多边形的一条边共线,则该边关联的2条边位于射线的同一侧,则该边及其关联的2条边均不进行统计处理;否则,该边及关联的2条边,统计为射线与多边形的边相交1次。(4)根据射线与平行x轴的网格线的交点位于多边形内/外的属性、以及射线与多边形的边的相交次数的统计,可知测试点是否位于多边形内。如果相交次数为偶数,测试点与交点具有相同的位于多边形内/外属性;否则,它们位于多边形内/外的属性相反。如图2中所示,相交的次数为奇数,测试点q位于多边形内,因为此时射线与水平网格线的交点位于多边形外。本发明运可用计算机的gpu进行并行计算以提高检测速度。此时,先将所有条状结构装入gpu的全局存储器中;然后,依据gpu的并行处理能力,将要处理的一众测试点分组,使得各组由gpu中的一个处理器进行处理;最后,将各处理器要用到的相关条状结构调入,即可在gpu的各个处理器中并行地进行点在多边形内的判断计算。本发明在一台计算机上进行了测试,对比方法是目前所知最高效的网格方法gcp(jingliandwenchengwang.2014.point-in-polygontestsbyapplyingtheraycrossingmethodlocallyviagridcenterpoints.internationaljournalofelectricalengineering21,3(2014),85–92.)。根据多边形的边数多少、多边形的边的分布是否均匀,测试时选用了4个多边形进行测试,它们来自(borutandivanakolingerova.2001.acell-basedpoint-in-polygonalgorithmsuitableforlargesetsofpoints.computers&geosciences27,10(2001),1135–1145)的推荐。这4个多边形在图4中展示,(a)pol10,(b)pol100,(c)pol1249,(d)pol28000,分别有10条边、100条边、1249条边和28000条边。测试时在多边形的包围盒中随机均匀地采样了1000000个点作为测试点。相关测试所有的计算机配置有一个intel(r)core(tm)i7-8700cpu,16gb内存,一个nvidiageforcegtx1080tigpu(有16gb的存储空间)。有关这2个方法对比的实验结果如下:*加速比计算:(t1-t2)/t2,t1、t2分别为gcp和本发明所花的时间。完成这些测试所用各类计算量统计情况:*re1、re2、re3分别为本发明所需乘法、加法和比较运算相较于gcp方法的相关运算量的节省情况,其计算为:本发明所需运算数量/gcp所需对应运算的数量。从以上实验结果可知,虽然本方法在预处理阶段需要较多的计算和较多的空间存储预处理结果,但增加的幅度不是很大。而在检测计算时,本发明可极大地节省所需乘法、加法、比较运算的数量,由此大幅提高检测速度;并且,由于高效利用计算机的并行处理能力,本发明在gpu上可获得比在cpu上更高的运算效率。本发明未详细阐述部分属于本领域公知技术。以上所述,仅为本发明部分具体实施方式,但本发明的保护范围并不局限于此。任何熟悉本领域的人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1