一种基于网格行构建条带结构的点在多边形内判断方法
- 国知局
- 2024-07-31 22:43:51
本发明属于计算机图形学、地理信息系统处理领域,具体来说是一种基于网格行构建条带结构的点在多边形内判断方法,即:对于一个点的空间位置,判断该位置是否位于一个多边形所限定的空间区域内的方法。
背景技术:
1、点是否位于多边形内的判定计算,是计算几何中的一个基本问题,这方面的方法在计算机图形学、模式识别、计算机辅助设计、地理信息系统等众多领域有着广泛的应用。这方面的方法可分为两类,逐边处理的方法,及对多边形的边进行一定组织管理的方法。
2、在前一类方法中,最常用的是射线法,即从被检测点发出一条射线,计算与它相交的多边形的边的数量,如果相交数量是奇数,则该点位于多边形内;否则位于多边形外。这类方法需要处理多边形的每条边,时间复杂度高,为o(n),n是多边形的边数。
3、在后一类方法中,主要是对多边形的边、或所覆盖的区域等进行一定的组织和管理,使得检测计算时无需处理多边形的所有边,因而可降低检测时间复杂度,加快计算速度。比如著名的梯形剖分法,用经过顶点的平行坐标轴的直线,将多边形剖分成一些梯形,再根据梯形坐标值进行单调增加或降低的顺序排列;这样,检测计算时可利用二分查找技术,以避免处理很多边,将检测计算的时间复杂度降至o(logn),n是多边形的边数。
4、在已有的各种方法中,网格法是一种应用广泛的方法,因为其实现简便、检测效率高。该方法是对多边形的与坐标轴对齐的包围盒进行均匀的网格划分,并在每个网格单元中记录所包含的多边形的边;然后,检测一个点时,根据网格划分的均匀性,以o(1)的计算开销知晓包含该点的网格单元,由此,只需考察该网格单元所包含的边,即可知该点是否位于多边形内。该方法能有效利用网格单元的局部性计算提高检测效率。
5、网元法,基于网格单元进行条带结构的创建,即根据一个网格单元中所包含的多边形的片段,由这些片段的首末端点的横坐标生成平行纵轴的分隔线,就得到了该网格单元的条带划分结构。但相邻2个网格单元的分隔线的左右2个条带可能是同性的,即所包含的多边形的边的情况一样、且上端边界向下指向多边形内或外的属性一致。这些冗余的条带,增加了创建条带的计算开销和存储条带的空间开销。同时,基于网格单元进行条带结构的创建,空间开销太大,使得对于较大规模的多边形,不便在gpu上进行条带的创建,妨碍了动态多边形处理的效率提升。
技术实现思路
1、为解决上述技术问题,本发明提出了一种基于网格行构建条带的点在多边形内判断方法,即以网格行为单位进行条带的创建。这样,可消除一个网格行中相邻网格单元可能冗余创建同性条带的问题。由此,将减少需要创建的条带数量,减少计算开销和空间需求,并由于空间开销的降低,使得本发明方法可在gpu上进行条带创建的工作。
2、为实现上述目的,本发明采用的技术方案如下:
3、一种基于网格行构建条带结构的点在多边形内判断方法,所述方法包括如下步骤:
4、步骤1、根据多边形所在直角坐标系生成对齐坐标轴的包围盒,利用网格划分横线将此包围盒划分成若干等宽的网格行,再在各网格行内生成管理多边形的边的条带结构,所述条带结构包括至少一个条带,所述条带记录其所包含的多边形的边、以及该条带上端边界向下指向多边形内或外的属性信息;
5、步骤2、根据测试点的位置坐标,找到包含该测试点的条带;
6、步骤3、从测试点发出向上的射线,判断其与所在条带中的多边形的边的相交情况,直至该射线抵达所在条带的上端边界;如果从测试点发出的向上的射线与多边形的偶数个边相交,则测试点位于多边形内或外的属性,就是其所在条带的上端边界向下指向多边形内或外的属性;否则,测试点位于多边形内或外的属性,就是其所在条带的上端边界向下指向多边形内或外的属性的相反属性。
7、进一步的,所述步骤1包括:
8、步骤1.1、对多边形的每条边,计算其与各个网格划分横线的交点的横坐标,该交点的纵坐标即网格划分横线的纵坐标;
9、步骤1.2、对于每一网格行,根据其上、下两条网格划分横线上与多边形边的交点的横坐标、以及位于该网格行中的多边形的顶点的横坐标,生成平行于直角坐标系纵轴的直线,所述直线将该网格行划分成若干个条带;
10、步骤1.3、根据多边形的边在一个网格行中的片段的横坐标范围,确定该网格行中的哪些条带包含该多边形的边;
11、步骤1.4、每条网格划分横线,被其与多边形的边的交点分割成若干横线片段;根据射线法获得所述若干横线片段位于多边形内或外的属性,基于各个条带的上端边界只能位于一个横线片段中,确定各个条带的上端边界向下指向多边形内或外的属性;
12、步骤1.5、对一个网格行中创建的若干个条带,根据若干个条带的横坐标进行顺序排列,并以一个数组管理;
13、步骤1.6、将每个网格行划分成均匀的网格单元,各网格单元记录并管理其所包含的条带情况。
14、本发明的有益效果在于:
15、相比网元法,本发明的行元法,基于网格行进行条带结构的创建,消除了一个网格行中相邻2个条带同性的情况。这样,可节省创建条带的计算开销和空间开销。由于基于网格行进行条带结构的创建,本发明只需保证一个网格行能处理所有边即可,因此,创建条带的空间预期开销为o(n),是包围盒划分成的网格行数量。这样,就大幅降低了空间需求,可在gpu上进行条带的创建,可大幅提升动态多边形的处理效率。
16、由于行元法是对一行中的条带进行统一管理,而网元法是对各个网格单元内的条带进行各自的管理,因而,行元法对于条带的组织管理更紧凑,使得编译器能够优化出效率更高的寻址操作来找到对应条带。在实验中,寻找测试点所在的条带地址,行元法仅需1条指令,而网元法需要2条指令。因此,测试计算时,行元法相比网元法,有一定的加速效果。
技术特征:1.一种基于网格行构建条带结构的点在多边形内判断方法,其特征在于,所述方法包括如下步骤:
2.根据权利要求1所述的一种基于网格行构建条带结构的点在多边形内判断方法,其特征在于,所述步骤1包括:
技术总结本发明公开了一种基于网格行构建条带结构的点在多边形内判断方法。所述方法包括:根据多边形所在直角坐标系生成对齐坐标轴的包围盒,然后将包围盒划分成若干等宽的网格行,再在此网格行内生成条带,各个条带记录其所包含的多边形的边、以及该条带上端边界向下指向多边形内或外的属性。测试时,从测试点发出向上的射线,测试其与所在条带中的多边形的边的相交情况,直至该射线抵达所在条带的上端边界;如果从测试点发出的射线与多边形相交的边有偶数个,则测试点位于多边形内或外的属性,就是其所在条带的上端边界向下指向多边形内或外的属性;否则相反。所述方法节省了创建条带的计算开销和空间开销,可大幅提升处理效率。技术研发人员:王文成,李佳玮受保护的技术使用者:中国科学院软件研究所技术研发日:技术公布日:2024/7/29本文地址:https://www.jishuxx.com/zhuanli/20240730/194341.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。