一种判定点是否位于多边形内的方法

文档序号:6362661阅读:452来源:国知局

专利名称::一种判定点是否位于多边形内的方法
技术领域
:本发明涉及一种点在多边形内的判定计算方法,属于计算机算法、计算几何技术、计算机图形
技术领域
,具体说是一种基于网格划分快速执行点在多边形内判定计算的方法。
背景技术
:点在多边形内的判定计算是一种基本的计算几何技术,在计算机图形学、计算几何、地理信息系统等方面有着广泛的应用。该问题的描述是给定多边形P和任意点Q,判定点Q是否位于多边形P内。关于多边形的点包容性判断的工作很多,基本可分为两类一类是依靠计算某些参数得到判定结果。例如经典的射线法(ray-crossing)(FoleyJD,vanDamA,FeinerSK,HughesJF.ComputerGraphics-PrinciplesandPractice.2nded.Reading,MAAddison-ffesley.1990.),就是过待测点向某方向作一条射线,计算该射线与多边形的边的交点个数来进行判定。若有奇数个交点,则该点位于多边形内;否则位于多边形外。这种方法简单直观,可处理任意多边形,通常被用作与其他算法对比的基准算法。其它的还有基于角度之和的算法(HormannK,AgathosA.Thepointinpolygonproblemforarbitrarypolygons.ComputationalGeometryTheoryandApplications2001;20:131-144.)、基于三角形操作的算法(FeitoFR,TorresJC.Inclusiontestforgeneralpolyhedra.Computers&Graphics1997;21(I):23-30.)等。这类算法的实现较为简单,但需要进行逐边操作,计算时间复杂度均为O(N),这里N为多边形的边数。另一类则是通过将多边形分解为一些简单的几何单元,建立某种辅助结构来加速判定操作,如梯形法(BorutZalik,GordonJ.Clapworthy,Auniversaltrapezoidationalgorithmforplanarpolygons.Computers&Graphics23(1999):253-263.)、网格法(ZalikB,KolingerovaAcell-basedpoint-in-polygonalgorithmsuitableforlargesetsofpoints.Computers&Geosciences2001;27:1135-1145。和ShengYang,Jun-HaiYong,JiaguangSun,HejinGu,Jean-ClaudePaul.Apoint-in-polygonmethodbasedonaquasi-closestpoint.Computers&Geosciences36(2010):205-213.)、分层法(WenchengWang,JingLi,EnhuaWu.2Dpoint-in-polygontestbyclassifyingedgesintolayers.Computers&Graphics29(2005):427-439.)、凸剖分法(JingLi,WenchengWang,EnhuaWu.Point-in-PolygonTestsbyConvexDecomposition.Computers&Graphics31(2007):636-648)、层次三角形(JuanJ.Jimenez,FranciscoR.Feitoa,RafaelJ.Seguraa.Anewhierarchicaltriangle-basedpoint-in-polygondatastructure.Computers&Geosciences35(2009):1843-1853.)等。这类算法虽然能提高检测计算的效率,但其预计算的开销一般比较大。一般而言,它们比较适合于对同一多边形进行多次检测的应用。凸剖分法(JingLi,WenchengWang,EnhuaWu.Point-in-PolygonTestsbyConvexDecomposition.Computers&Graphics31(2007):636-648)是先将多边形凸剖分并以树结构管理所得的凸多边形,判定时通过树结构快速查找可能包含待测点的凸多边形,然后以高效的凸多边形点检测算法确定待测点是否在多边形内。当剖分得到的凸边形个数较少时,该算法具有很高的效率。但随着凹点数目的增多,凸多边形数目随之增多,检测时间增长。此外,凸剖分法的预处理时间也相对较长。网格结构简单,仓Il建迅速,在实际中得到较多的应用。文献(ZalikB,KolingerovaAcell-basedpoint-in-polygonalgorithmsuitableforlargesetsofpoints.Computers&Geosciences2001;27:1135_1145。)将多边形所在区域均匀剖分为O(N)个网格,并为每个网格单元标记其位于多边形内、外、或是多边形边界上。在检测时,一一判定待测点和网格单元的位置关系,若待测点位于内部或外部网格单元内,则可以0(1)时间直接断定点位于多边形的内部或外部;若待测点位于边界网格单元中,则需要查找距待测点最近的边,并根据待测点与此最近边的位置关系得到最终判定结果。该方法的期望预处理时间为0(N3/2),空间开销为O(N),检测时间复杂度为0(N1/2)。但该判定方法的判定相对复杂,在最近点与待测点位于不同单元或者多边形的两条邻边几乎共线时会出现错误。为此,文献(ShengYang,Jun-HaiYong,JiaguangSun,HejinGu,Jean-ClaudePaul.Apoint-in-polygonmethodbasedonaquasi-closestpoint.Computers&Geosciences36(2010):205-213.)提出了一种被称为“quasi-closestpoint”的改进方法(简称QCPM),即附加一些约束条件并扩大查找范围至相邻单元,以找到合适的距待测点最近的边,以免选择错误而导致判定出错。这样,这种方法在判定时就需要处理多个网格单元。由于点在多边形内的判定计算是一种基本计算,其效率对于应用系统的工作效率有很大的影响,因此,研究其高效处理的方法一直是国际上讨论的热点问题。
发明内容本发明的目的在于发掘局部相关性,以提高点在多边形内判定计算的效率。本发明提供一种基于矩形网格中心点判定待测点位置属性的方法。该方法大致可分为两个步骤先将多边形包围盒进行均匀地矩形网格剖分,逐步计算各个网格中心点的位置属性;再根据已获知‘内/外’属性的网格中心点和待测点的连线与多边形边之间的关系判定待测点位置。在判定网格中心点的位置属性时,我们先处理靠近包围盒边沿的网格单元,即对于任一个靠近包围盒边沿的网格中心点,将其与包围盒外任一点进行连线,然后计算与该连线相交的多边形边的数目,以判断这些点是否位于多边形内;然后,按照一定传递方式,如根据已获知其‘内/外’属性的网格中心点,由外及里逐步地递推计算它们邻近网格中心点是否位于多边形内,也就是说,任一个未知位置属性的网格中心点,与它附近已处理的网格中心点(只有第一次是与包围盒外的点)进行连线,然后计算与该连线相交的多边形边的数目,即可判断该点是否位于多边形内。以上过程逐步地进行,直至所有网格中心点获得其位于多边形‘内/外’的属性。如图I所示,我们按照由左往右的方式,逐步地计算各个网格中心点与多边形的位置关系。在判断一个待测点是否位于多边形内时,我们根据其坐标得知它所在的网格单元,然后,将该网格单元中心点与待测点进行连线,计算与该连线相交的多边形边的数目。根据相交的边的数目和该中心点的‘内/外’属性,即可判断待测点是否位于多边形内。判断计算如下如果相交的边数是奇数,则待测点的‘内/外’属性与该中心点的‘内/外’属性是相反的;反之,相交的边数是偶数,则待测点的‘内/外’属性与该中线点的‘内/外’属性是相同的。这可以根据射线法的原理很方便地推导出来。在本发明的处理中,有一些奇异情况要处理,即网格中心点位于多边形的顶点或边上,这样的网格中心点被称为奇异点。对此,我们的处理如下对于奇异点,我们进行标志;然后在进行检测计算时,如果待测点所在网格单元的中心点是一个奇异点,我们就沿着一定的方向(一般是沿着平行坐标轴的某个方向)逐步地搜索邻近的网格单元,直至找到一个非奇异的网格中心点(包围盒的外面的任一点都位于多边形外,在本发明中都作为非奇异网格中心点处理)。本发明的有益效果如下与现有关于点在多边形内的判定计算方法相比,特别是与基于网格剖分的同类相t匕,本发明的预计算简单快速,检测计算也很简便,空间需求少,能有效减少判定计算要处理的多边形边的数量,很好地利用局部计算降低计算开销。此外,由于本发明在检测时仅需要求线段相交多边形边的数量,因此本发明对于自相交、重叠边等非流形情况能够等同地处理。图I是本发明的根据局部相关性逐步递推计算各单元中心点位置的示意图;图2是两条直线段间奇异情况的不意图;图3是本发明处理自相交、重叠边等非流形情况的示意图;图4是本发明实验所用的多边形结构图。具体实施例方式本发明包括两个阶段第一阶段是对多边形的包围盒进行均匀的网格划分,并计算各个网格中心点(预测点)与多边形的位置关系;第二阶段是根据预测点的位置属性,对待测点进行局部计算,以判断待测点与多边形的位置关系。第一阶段的步骤如下I)根据文献(ZalikB,KolingerovaI.Acell-basedpoint-in-polygonalgorithmsuitableforlargesetsofpoints.Computers&Geosciences2001;27:1135-1145.)中经验公式,计算网格划分的分辨率,即^,UD.■:,其中,W和H分别为网格包围盒的长度和宽度,而No0fCellsx和NoOfCellsy分别是沿X轴y轴方向的网格单元个数。2)在确定分辨率后,要为每个网格单元计算落入其中的边,并将边指针加入相关网格单元。也就是说在确定分辨率后,要为每个网格单元计算并记录落入其中的边。所谓的边指针是指程序实现中指向边结构的指针。为了快速实现该过程,我们使用DDA算法(Cleary,J.C.,Wyvill,G.Analysisofanalgorithmforfastraytracingusinguniformspacesubdivision.TheVisualComputer1988;4(2):65-83),仅以加法递增计算各个边占据的网格单元。3)在创建网格之后,计算每个网格中心点的‘内/外’属性,也就是判定这些中心点位于多边形之内还是之外。具体方法是在判定网格中心点的位置属性时,我们先处理靠近包围盒边沿的网格单元,即对于任一个靠近包围盒边沿的网格中心点,将其与包围盒外任一点进行连线,然后计算与该连线相交的多边形边的数目,以判断这些点是否位于多边形内;然后,按照一定传递方式,如根据已获知其‘内/外’属性的网格中心点,由外及里逐步地递推计算它们邻近网格中心点是否位于多边形内,也就是说,任一个未知位置属性的网格中心点,与它附近已处理的网格中心点(只有第一次是与包围盒外的点)进行连线,然后计算与该连线相交的多边形边的数目,即可判断该点是否位于多边形内。以上过程逐步地进行,直至所有网格中心点获得其位于多边形‘内/外’的属性。如图I所示,自左至右遍历各个网格单元,并递推地进行判定计算各个网格中心点与多边形的位置关系。第二阶段的步骤如下I)根据待测点Q的坐标找到它所在的网格单元Cti,j,其中i,j分别为单元X,Y方向上的坐标。2)检测网格单元的中心点的标志,看它是否是奇异点。如果是奇异点,我们就从“往左、往右、往上、往下”中任选一个方向,从该网格单元出发,逐个地搜索所考察的邻近网格中心点是否是奇异的,直至找到一个非奇异的网格中心点,设为Μ’3)连一条从Q到中心点M’ti,的连线QM’ti,(称为待测边)。4)遍历该连线穿过的该网格单元中所有的边,记录与QM’u有交的多边形边的个数。如果相交边数为偶数,则待测点Q与网格中心点M,[U的‘内/外’属性相同;否则,待测点Q与M’的‘内/外’属性相反。因为每条多边形的边为一条线段,故在本发明中,要检测多边形的边是否与两个点的连线相交,也就是说,要判断两条线段是否相交,可以通过判定点与直线的相对位置关系实现。即设有两条线段ei和e2,若ei的两个顶点分别位于e2的两侧,并且e2的两个顶点分别位于ei的两侧,则认为ei与e2有交;否则认为ei与e2无交。判断一个点Q与一条边e关系的方法如下设边e的两个顶点分别为Ptl和P1,Q为待测点。计算向量获与向量可f的叉积的Z值。若该值大于0,则认为Q在e的右侧;否则认为Q在e左侧。如此得到的点与边的关系仅分为两种,即左侧与右侧。如果点与边共线,则强制认为其位于直线的某一侧(如设为左侧),这种行为称为强制设定规则。这样做的优点是避免了对奇异情况的特殊处理。它在各种奇异情况下均能得到正确的结果,下面举出几个例子作为说明,其他奇异情况以此类推。设沿多边形的边逆时针行走时(即图2中的箭头方向),左手侧为多边形内,右手侧为多边形外。若待测点与网格中心点的连线穿越多边形的顶点,则可能出现图2(a)、(b)所示的情况。M,是作为参考的已知位置属性的非奇异点,不失一般性可假定为多边形内。在图2(a)中,按照强制设定规则,相交AP1位于M’Q1的左侧,而多边形的边士和匕的另一端也在M’Q1的左侧,因此M’Q1与和Id1均无交,Q1M,的位置属性相同,皆为内部。结论正确。图2(b)中,对于Q2,相交点P2的位置被强制设为M’Q2的左侧,那么M’Q2与b2无交,与a2有交。相交数量为1,02与『的位置属性相异,即Q2位于多边形外,结论正确。若待测点与网格中心点的连线与多边形的边共线,则可能出现图2(c)、(d)所示的情况。图2(c)中,多边形的边b3与M,Q3重合,按照强制设定规则,边b3位于M,Q3的左侧,与M’Q3无交。M’Q3分别与&3和C3相交,相交个数为2,因此Q3与,的属性相同,均为多边形内。而在图2(d)中,比与皿’Q4重合。判定时,b4被判定为位于M’04的左侧,M’Q4仅与a4相交。因此,Q4与,的属性相反,位于多边形外。由于本发明在检测时只需求解线段相交多边形边的数量,因此本发明对于自相交、重叠边等非流形情况能够等同地处理。以图3为例,图3(a)中,多边形的边P5Pc^PP2P3自相交,中心点M位于多边形内,测试边QM与P5Pci和P2P3均相交,交点数为偶数,所以Q位于多边形内。在图3(b)中,边P2P3和P3P2重叠,中心点則立于多边形内,测试边QM与P2P3和P3P2均相交,交点数为偶数,所以Q位于多边形内。为了验证新算法的性能,我们在一台配置有2.85GHzCPU,4GBRAM的台式机上与其他算法进行了对比实验。用于对比的算法分别来自于网格法(ZalikB,KolingerovaI.Acell-basedpoint-in-polygonalgorithmsuitableforlargesetsofpoints.Computers&Geosciences2001;27:1135-1145)、网格改进法QCPM(ShengYang,Jun-HaiYong,JiaguangSun,HejinGu,Jean-ClaudePaul.Apoint-in-polygonmethodbasedonaquasi-closestpoint.Computers&Geosciences36(2010):205-213.)和凸剖分法(JingLi,WenchengWang,EnhuaWu.Point-in-PolygonTestsbyConvexDecomposition.Computers&Graphics31(2007):636-648.)。其中,网格法和QCPM的数据直接引用自文献(ShengYang,Jun-HaiYong,JiaguangSun,HejinGu,Jean-ClaudePaul.Apoint-in-polygonmethodbasedonaquasi-closestpoint.Computers&Geosciences36(2010):205-213.)。其试验中使用的计算机配置为2.93GHzCPU,512MBRAM,优于我们实验的机器。凸剖分法为三叉树实现。被测多边形均来自文献(ZalikB,KolingerovaI.Acell-basedpoint-in-polygonalgorithmsuitableforlargesetsofpoints.Computers&Geosciences2001;27:1135-1145),如图4所不。待测点个数均为1,000,000,均匀分布在比网格包围盒稍大的范围内,图4a)为多边形pollO,图4b)为多边形pollOO,图4c)为多边形poll249,图4d)为多边形pol28000。表I列出了实验结果,包括各种算法的预处理时间、1,000,000个点的判定时间、预处理和判定的总时间(单位均为秒),以及新方法相对于这些对比方法的计算加速率。在此,各种网格方法都是基于同样的网格划分分辨率进行的。表I本发明与其他方法的对比实验数据权利要求1.一种判定点是否位于多边形内的方法,其步骤包括(1)将多边形包围盒进行矩形网格剖分;(2)判定各网格中心点是否位于多边形内,得到各中心点相对于多边形的内外属性;(3)根据待测点的坐标确定其所在网格单元;(4)逐个搜索待测点所在网格单元的中心点及其邻近中心点,直至得到一非奇异的中心点;(5)计算待测点与所述非奇异中心点的连线穿过的多边形边的个数,当为偶数个时,判定待测点与所述非奇异点具有相同的内外属性,否则相反。2.如权利要求I所述的方法,其特征在于,步骤(2)先处理靠近包围盒边沿的网格单元,再由外及里逐步地递推计算它们邻近网格中心点的位置。3.如权利要求2所述的方法,其特征在于,对于任一个靠近包围盒边沿的网格中心点,将其与包围盒外任一点进行连线,然后计算与该连线相交的多边形边的数目,以判断这些点与多边形的位置关系。4.如权利要求2所述的方法,其特征在于,递推计算是将任一个未知位置属性的网格中心点,与它附近已处理的网格中心点进行连线,然后计算与该连线相交的多边形边的数目,从而判断该点与多边形的位置关系。5.如权利要求2至4所述的方法,其特征在于,递推计算是自左至右遍历各个网格单JLiο6.如权利要求I所述的方法,其特征在于所述步骤(3)是根据待测点Q的坐标找到它所在的网格单元Cti,j,其中i,j分别为单元X,Y方向上的坐标;所述步骤⑷具体为检测网格单元Cu的中心点的标志,看它是否是奇异点,即位于多边形的顶点或边上的网格中心点;如果是奇异点,就从“往左、往右、往上、往下”中任选一个方向,从该网格单元出发,逐个地搜索所考察的邻近网格中心点是否是奇异的,直至找到一个非奇异的网格中心点,设为M’;所述步骤(5)具体为连一条从Q到中心点M’的连线QM’形成待测边;遍历该连线穿过的该网格单元中所有的边,记录与QM’有交的多边形边的个数;如果相交边数为偶数,则待测点Q与网格中心点M’的‘内/夕卜’属性相同;否则,待测点Q与M’ti,^的‘内/夕卜’属性相反。7.如权利要求6所述的方法,其特征在于,判断两条边是否相交,通过判定点与直线的相对位置关系实现,若两条边各自的两个顶点分别位于另一线段的两侧,则为相交。8.如权利要求7所述的方法,其特征在于,如果点与边共线,则判定其位于直线的某一侧。9.如权利要求I所述的方法,其特征在于,所述多边形还包括自相交多边形和重叠边多边形。全文摘要本发明提供一种判定点是否位于多边形内的方法。该方法大致可分为两个步骤先将多边形包围盒进行均匀地矩形网格剖分,由外及里逐步计算各个网格中心点的位置属性;再根据已获知‘内/外’属性的网格中心点和待测点的连线与多边形边的相交关系判定待测点位置。本发明操作简单,计算速度快,能有效减少判定计算要处理的多边形边的数量,还能统一处理多边形有自相交、重叠边等非流形情况,可很好地降低计算开销。文档编号G06T7/00GK102629375SQ20121000403公开日2012年8月8日申请日期2012年1月6日优先权日2012年1月6日发明者李静,王文成申请人:中国科学院软件研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1