本发明专利技术属于计算机图形技术和计算几何技术领域,是一种判断点是否位于多边形内的方法。本发明专利技术先对多边形进行凸剖分,并建立二叉树来管理这些凸多边形;然后,根据被检测点的坐标位置,对所建立的二叉树进行考察,以找到该二叉数的一叶节点对应的凸多边形,再检测该点是否位于这个凸多边形内,以判断被检测点是否位于给定的多边形内。本发明专利技术的优点是计算速度快,比基于多边形剖分的同类方法节省存储空间,易于实现。适用于多个点要对同一个多边形进行这种包含性判断的情况。
【技术实现步骤摘要】
本专利技术属于计算机图形技术和计算几何
,尤其涉及一种判断点是否 位于多边形内的方法。
技术介绍
点是否位于多边形内的判定计算,是计算几何中的一个基本问题,这方面的 方法在计算机图形学、模式识别、地理信息系统等众多领域有着广泛的应用。这 方面的方法可分成两类, 一类是不对多边形进行预先处理的, 一类是要对多边形 预先进行一定的处理的。在前一类方法中,最常用的是射线法,即从被检测点发出一条射线,计算与 它相交的多边形的边的个数,如果是奇数个,则该点位于多边形内,否则位于多 边形外。这类方法需要计算多边形的每条边,时间复杂度高,为O(N)(即其计 算量的多少是与N成线性对应关系),N是多边形的边数。在后一类方法中,主要是对多边形的边、所覆盖的区域等进行一定的组织, 使得判断计算的时间复杂度降低,加快计算速度。比如著名的梯形剖分法(参见 Zalik B, Jezemik A., Zalik KR. Polygon trapezoidation by sets of open trapezoids. Computers & Graphics 2003;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个单调边序列)(参见文献de Berg M, van Kreveld M, Ove醒rs M, et al. Computational Geometry: Algorithms and Applications. 2nd ed. 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>formula see original document page 7</formula>丑Z)(扁露eDeg,) = i」"广 l ,选择度SD(Selection Degree) =Min(PD, BD),即PD和BD这两个值中较小的那一个值就为SD的值。b)为每条直线计算其SD值,然后,以SD值最大的一条直线作为这个凸多边 形集合的划分直线,将此集合分割成2个子集合,此时这2个子集合均要包含与该 划分直线相交的凸多边形。这里,计算PD的目的是要使与划分直线相交的凸多边形的个数尽可能少,以减少凸多边形被重复处理的次数,以降低树的高度,节省存储空间和加速判断 计算;计算BD的目的是使树的两边尽可能平衡,以提高判断计算时相应的二分 搜索的速度。所建立的平衡二叉树,如图3所示,其中树的间结点记录相关的划分直线, 而其叶子结点记录相关的一个凸多边形。2.第二阶段的实现步骤如下 (1)根据被检测点的本文档来自技高网...
【技术保护点】
一种判断点是否位于多边形内的方法,其步骤包括:1)将给定的多边形剖分为单调多边形集合;2)将上述单调多边形中非凸的多边形进行凸剖分,得到给定多边形的凸多边形集合;3)以凸多边形的边形成的直线作为划分直线,基于每划分直 线两侧凸多边形的个数建立平衡二叉树,其中根节点和中间结点存放各自相应的划分直线,叶节点存放相应的一凸多边形;4)根据给定点与平衡二叉树非叶子节点存放的划分直线的位置关系对上述平衡二叉树进行搜索,直至到达一叶节点;5)判断给定 点和上述叶节点对应的凸多边形的位置关系,如果该点位于这个凸多边形内,则该点位于给定的多边形内;否则,该点位于给定的多边形外。
【技术特征摘要】
【专利技术属性】
技术研发人员:李静,王文成,
申请(专利权)人:中国科学院软件研究所,
类型:发明
国别省市:11[中国|北京]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。