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

文档序号:6610275阅读:326来源:国知局

专利名称::一种判断点是否位于多边形内的方法
技术领域
:本发明属于计算机图形技术和计算几何
技术领域
,尤其涉及一种判断点是否位于多边形内的方法。
背景技术
:点是否位于多边形内的判定计算,是计算几何中的一个基本问题,这方面的方法在计算机图形学、模式识别、地理信息系统等众多领域有着广泛的应用。这方面的方法可分成两类,一类是不对多边形进行预先处理的,一类是要对多边形预先进行一定的处理的。在前一类方法中,最常用的是射线法,即从被检测点发出一条射线,计算与它相交的多边形的边的个数,如果是奇数个,则该点位于多边形内,否则位于多边形外。这类方法需要计算多边形的每条边,时间复杂度高,为O(N)(即其计算量的多少是与N成线性对应关系),N是多边形的边数。在后一类方法中,主要是对多边形的边、所覆盖的区域等进行一定的组织,使得判断计算的时间复杂度降低,加快计算速度。比如著名的梯形剖分法(参见ZalikB,JezemikA.,ZalikKR.Polygontrapezoidationbysetsofopentrapezoids.Computers&Graphics2003;27(5):791-800.),用经过顶点的平行坐标轴的直线,将多边形剖分成一些梯形,再根据梯形坐标值的单调增加或降低的方法,将梯形顺序排列,判断计算时可利用二分检索技术,以避免处理很多边,将判断计算的时间复杂度降至O(logN),N是多边形的边数。在实际应用中,经常会遇到边数很多的多边形,而目前已有的技术的方法,其空间开销很大,不便于对边数很多的多边形进行处理,受空间表达能力或计算能力的限制,判断效率不高。
发明内容本发明的目的是提供一种判断点是否位于多边形内的方法,提高计算速度,降低空间开销。本发明的判断点是否位于多边形内的方法,其步骤包括1)将给定的多边形剖分为单调多边形集合;2)将上述单调多边形中非凸的多边形进行凸剖分,得到给定多边形的凸多边形集合;3)以凸多边形的边形成的直线作为划分直线,基于每划分直线两侧凸多边形的个数建立平衡二叉树,其中根节点和中间结点存放各自相应的划分直线,每个叶节点存放相应的一凸多边形;4)根据给定点与平衡二叉树非叶子节点存放的划分直线的位置关系对上述平衡二叉树进行搜索,直至到达一叶节点;5)判断给定点和上述叶节点对应的凸多边形的位置关系,如果该点位于这个凸多边形内,则该点位于给定的多边形内;否则,该点位于给定的多边形外。本发明是一种对多边形进行预先处理的方法,也是基于多边形覆盖区域的剖分。与现有方法相比,所剖分后的单元是凸多边形,其个数要比其它剖分方法生成的单元的个数少,因此,所建立的二叉树和表达凸多边形的空间开销得到节省。二叉树搜索的时间复杂度是O(logN),且判断一个点是否位于一个凸多边形内的时间复杂度也是O(logN),因此本发明的时间复杂度也是O(logN)。但得益于其剖分单元的个数少,其判断速度快于基于梯形剖分的方法。处理边数很多的多边形时,点是否位于多边形内的判断效率得到大幅的提高,适用于各种要对同一个多边形进行多次判断点是否位于多边形内的方法。图1多边形的凸剖分操作图。图2多边形的凸剖分结果图。图3据凸剖分结果图建立的平衡二叉树。图4判断某点是否位于凸多边形内的方法图。图5判断点是否位于多边形内的流程图。具体实施例方式本发明的方法主要包括下列两个阶段第一阶段是对给定的多边形进行凸剖分,建立平衡二叉树来管理凸多边形;第二阶段是根据所建立的平衡二叉树和生成的凸多边形,判断被检测点是否位于多边形内。l.第一阶段的实现步骤如下-首先将给定的多边形剖分成一些单调多边形(即每个这样的多边形的边可分成2个单调边序列)(参见文献deBergM,vanKreveldM,Ove醒rsM,etal.ComputationalGeometry:AlgorithmsandApplications.2nded.Berlin:Springer,2000中的方法),再将各个单调多边形进行凸剖分。本发明采用的是一种不加点的凸剖分方法,图1是多边形的凸剖分操作图,其具体步骤如下-1)将多边形剖分成单调多边形a)找到多边形的所有上凹点和下凹点;这里,若一个凹点的Y坐标值小于它相邻的两个顶点的Y坐标值,则称该凹点为上凹点;若一个凹点的Y坐标值大于它相邻的两个顶点的Y坐标值,则称该凹点为下凹点;b)对所有上凹点和下凹点,根据它们的Y坐标值排序;c)对每一个上凹点,将其与任一个Y坐标值小于它的下凹点或凸顶点连成一条边,选取其中位于该多边形内且边长最短的一条边,将多边形进行一次剖分;同理,对每一个下凹点,将其与任一个Y坐标值大于它的上凹点或凸顶点连成一条边,选取其中位于该多边形内且边长最短的一条边,将多边形进行一次剖分;d)重复c)的操作,上凹点和下凹点都要操作一次;2)将非凸的单调多边形剖分成凸多边形a)找出单调多边形中的凹点,将它们的Y坐标值从大到小进行排序;b)按照Y坐标值由大到小的顺序依次处理凹点,将凹点与Y坐标值小于它的凹点或其它顶点进行连接,选取其中边长最短且在该单调多边形内的一条边作为该单调多边形的一次剖分;c)反复进行b)的操作,直至各个剖分的多边形中都没有凹点为止,即这些凸多边形的并集就是原来的多边形。图2即为多边形的凸剖分结果图。3)建立一个管理凸多边形的平衡二叉树对凸边形构成的集合迭代地进行二分,即每次将所考察的凸多边形集合分成2个集合,直至每个子集合中只有一个凸多边形。在二分的过程中,对于所考察的多边形集合中这些多边形的边,将每条边两端延长,形成与这些边共线的直线,计算每条直线两边的凸多边形个数的差异,以及与该直线相交的凸多边形的个数相对于该集合中凸多边形个数的比例,来决定分割该集合的划分直线。它们的具体计算方法如下a)假设位于一条直线左侧的凸多边形集合为S,、位于其右侧的凸多边形集合为&、与该直线相交的凸多边形集合为Sz,它们所包含的凸多边形个数分别为ru、nR、ni。我们计算3个参量,即纯净度户D(i^g压g^e)="£+,平衡度<formula>formulaseeoriginaldocumentpage7</formula>丑Z)(扁露eDeg,)=i」"广l,选择度SD(SelectionDegree)=Min(PD,BD),即PD和BD这两个值中较小的那一个值就为SD的值。b)为每条直线计算其SD值,然后,以SD值最大的一条直线作为这个凸多边形集合的划分直线,将此集合分割成2个子集合,此时这2个子集合均要包含与该划分直线相交的凸多边形。这里,计算PD的目的是要使与划分直线相交的凸多边形的个数尽可能少,以减少凸多边形被重复处理的次数,以降低树的高度,节省存储空间和加速判断计算;计算BD的目的是使树的两边尽可能平衡,以提高判断计算时相应的二分搜索的速度。所建立的平衡二叉树,如图3所示,其中树的间结点记录相关的划分直线,而其叶子结点记录相关的一个凸多边形。2.第二阶段的实现步骤如下(1)根据被检测点的坐标,对二叉树进行由顶至底的搜索,即先考察树的根结点,看被检测点位于其划分直线的哪一边,然后就以那一边对应的子结点作为下一步考察的对象,如此迭代进行,直至到达叶结点,该叶节点中的凸多边形就是所要找的凸多边形。(2)对于叶结点中的凸多边形,判断被检测点是否位于该凸多边形内,首先将它的边分成两个单调边序列,即找到这个凸多边形中Y坐标值最大的一个顶点和Y坐标值最小的一个顶点,根据这两个顶点将该多边形的边分成2个部分,每个部分都是顺序连接的边,且这些边的顶点Y坐标值是顺序增大的或减小的;然后,根据被检测点的Y坐标值形成一条平行X轴的直线,如图4所示,计算该直线与这个凸多边形的两个单调边序列的两个交点的X坐标值,比较被检测点的X坐标值是否位于两个交点的X坐标值之间。如果是,则该点位于这个凸多边形内,也就是位于给定的多边形内;否则,在给定的多边形外。图5是本发明判断点是否位于多边形内的整体流程图。下面是本发明的一些实验数据随机生成4个多边形以进行实验,它们都有10000条边,但它们的凹点所占的比例分别为0%、10%、30%和50%。凹点比例为0%的多边形就是凸多边形。测试时,我们在多边形的包围盒内均匀分布1000个点进行检测,将它们的平均检测时间作为实验数据。我们将新方法与国际上已知最快的随机渐增梯形法(therandomizedincrementaltrapezoidation-basedalgorithm)进行了实验对比,实验数据见下列表中。实验表明,新方法使用的凸多边形个数少于随机渐增梯形法所使用的梯形个数,新方法在存储空间需求和检测速度方面均好于随机渐增梯形法。<table>tableseeoriginaldocumentpage8</column></row><table>实验表明,与目前最快的基于梯形剖分的方法一増量梯形法相比,本发明的方法在多边形的预处理的时间、空间需求和判断计算等各个方面具有相同的复杂度,但是新方法所生成的凸多边形要少于增量梯形法所生成的梯形,因此,新方法的空间需求要少,判断速度要快。权利要求1、一种判断点是否位于多边形内的方法,其步骤包括1)将给定的多边形剖分为单调多边形集合;2)将上述单调多边形中非凸的多边形进行凸剖分,得到给定多边形的凸多边形集合;3)以凸多边形的边形成的直线作为划分直线,基于每划分直线两侧凸多边形的个数建立平衡二叉树,其中根节点和中间结点存放各自相应的划分直线,叶节点存放相应的一凸多边形;4)根据给定点与平衡二叉树非叶子节点存放的划分直线的位置关系对上述平衡二叉树进行搜索,直至到达一叶节点;5)判断给定点和上述叶节点对应的凸多边形的位置关系,如果该点位于这个凸多边形内,则该点位于给定的多边形内;否则,该点位于给定的多边形外。2、如权利要求l所述的判断点是否位于多边形内的方法,其特征在于所述步骤1)为a)找到多边形的所有上凹点和下凹点;b)对所有上凹点和下凹点,根据它们的Y坐标值排序;c)对每一个上凹点,将其与任一个Y坐标值小于它的下凹点或凸顶点连成一条边,选取其中位于该多边形内部且边长最短的一条边,将多边形进行一次剖分;同理,对每一个下凹点,将其与任一个Y坐标值大于它的上凹点或凸顶点连成一条边,选取其中位于该多边形内部且边长最短的一条边,将多边形进行一次剖分;d)重复c)的操作,上凹点和下凹点都要操作一次。3、如权利要求1或2所述的判断点是否位于多边形内的方法,其特征在于所述步骤2)为a)找出单调多边形中的凹点,将它们的Y坐标值由大到小进行排序;b)按照Y坐标值由大到小的顺序依次处理凹点,将凹点与Y坐标值小于它的凹点或其它顶点进行连接,选取其中边长最短且在该单调多边形内的一条边作为该单调多边形的一次剖分;c)反复进行b)的操作,直至各个剖分的多边形中都没有凹点为止。4、如权利要求1所述的判断点是否位于多边形内的方法,其特征在于计算与划分直线相交的当前凸多边形集合中的凸多边形的个数相对于集合中凸多边形个数的比例,以及位于该划分直线两侧的当前凸多边形集合中的凸多边形的个数的比例,来选定分割当前凸多边形集合的划分直线,其步骤如下1)设位于一条划分直线两侧的凸多边形集合分别为S,、SR、与该直线相交的凸多边形集合为S,,它们所包含的凸多边形个数分别为n,,n、n;计算3个参量;纯净度<formula>formulaseeoriginaldocumentpage3</formula>选择度<formula>formulaseeoriginaldocumentpage3</formula>2)选定SD值最大的一条划分直线作为当前凸多边形集合的划分直线。5、如权利要求4所述的判断点是否位于多边形内的方法,其特征在于如存在多条SD值最大的划分直线,则任选一条作为当前凸多边形集合的划分直线。6、如权利要求1所述的判断点是否位于多边形内的方法,其特征在于所述步骤4)为从二叉树的根结点开始,判断被检测点位于它相关的划分直线的哪一边,并以这边对应的子结点作为下一步考察的树结点,沿着树结点迭代地操作,直至达到一个叶结点。7、如权利要求1或6所述的判断点是否位于多边形内的方法,其特征在于所述步骤5)为将该叶节点对应的凸多边形的边分成两个单调边序列;然后,根据给定点的Y坐标值形成一条平行X轴的直线,并计算该直线与这个凸多边形的两个单调边序列的两个交点的X坐标值;如果给定点的X坐标值位于这两个交点的X坐标值之间,则这该点位于该凸多边形内,也位于给定的多边形内;否则该点位于该凸多边形外,也位于给定的多边形外。全文摘要本发明属于计算机图形技术和计算几何
技术领域
,是一种判断点是否位于多边形内的方法。本发明先对多边形进行凸剖分,并建立二叉树来管理这些凸多边形;然后,根据被检测点的坐标位置,对所建立的二叉树进行考察,以找到该二叉数的一叶节点对应的凸多边形,再检测该点是否位于这个凸多边形内,以判断被检测点是否位于给定的多边形内。本发明的优点是计算速度快,比基于多边形剖分的同类方法节省存储空间,易于实现。适用于多个点要对同一个多边形进行这种包含性判断的情况。文档编号G06T7/60GK101114379SQ20071012150公开日2008年1月30日申请日期2007年9月7日优先权日2007年9月7日发明者静李,王文成申请人:中国科学院软件研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1