矢量图形快速多边形填充方法

文档序号:6623682阅读:405来源:国知局
矢量图形快速多边形填充方法
【专利摘要】本发明公开了一种矢量图形快速多边形填充方法,其具体技术方案如下,包括多边形第一预处理步骤、多边形剪裁步骤、填充多边形步骤,所述多边形第一预处理步骤,将待处理文件中表示矢量多边形的点集合列表转换为能够表示矢量多边形处于屏幕显示区域内部分的点最小子集合列表,该矢量图形快速多边形克服了原电子海图引擎中的填充方法运算资源消耗大,适用硬件范围小,散热、耗电、系统稳定性均不理想的缺陷,大大降低电子海图引擎中大量矢量图形元素的显示填充的计算资源消耗,降低了CPU或者图形显示处理芯片的大量实时图形填充显示处理时的热量,有效改善实时海图处理的延时,特别适于散热量、运算性能制约较严重的低配电脑、移动终端所采用。
【专利说明】矢量图形快速多边形填充方法

【技术领域】
[0001]本发明属于计算机图形学领域,可应用于包括GIS行业在内的多个行业中的地图显示,具体涉及一种矢量图形快速多边形填充方法。

【背景技术】
[0002]在矢量图形显示中,尤其是GIS,经常需要显示一块陆地或者水域,这些区域可以在不同比例尺下显示,实际上是由上千个甚至上万个点显示的。如果以此获取这些点的坐标并对屏幕进行一次剪裁,这是相当耗费时间的。
[0003]为了实现电子海图引擎(显示S57格式的电子海图),需要解决大量图形元素的显示效率问题,而其中又以多边形填充的显示最耗时。经过测试发现百分之七、八十的时间都运用在了多边形的剪裁与填充上,目前常用的剪裁算法、填充算法来进行电子海图的显示时,在散热量、运算性能制约较严重的低配电脑、移动终端上,包含大量矢量多边形的海图文件的剪裁填充会带来明显的显示延时及系统发热量增加,导致使用效果变差、耗电量增力口、系统稳定性下降。
[0004]实现屏幕上区域的填充,需要运用到计算机图形学中的多边形剪裁算法和多边形填充算法。常见的多边形算法包括由Sutherland和Hodgman提出的逐边剪裁法以及WeiIer和Atherton提出的双边剪裁算法。而常见的多边形填充算法包括了注入填充算法(floodfill algorithm)、边界填充算法(boundary fill algorithms)和多边形扫描转换算法。本发明算法依然采用了其中的逐边剪裁算法和多边形扫描注入填充算法。但一般开发人员会先调用多边形剪裁算法(把不需要的点踢出去),再采用多边形填充算法。不过只采用这两种算法它们所耗时可以相差十倍百倍。


【发明内容】

[0005]本发明公开了一种矢量图形快速多边形填充方法,该矢量图形快速多边形克服了原电子海图引擎中的填充方法的填充效率低,计算资源消耗大,适用硬件范围小,散热、耗电、系统稳定性均不理想的缺陷。该填充方法大大提高了原矢量图形多边形填充方法的处理效率,大大降低电子海图引擎中(显示S57等格式的电子海图)大量矢量图形元素的显示填充所带来的CPU(中央处理器)或者图形显示处理器等运算芯片的计算资源消耗,提高了电子海图引擎的显示速率,降低了 CPU或者图形显示处理芯片的大量实时图形填充显示处理时的热量,在电子海图引擎的应用平台中,有效改善实时海图处理的延时,特别适于散热量、运算性能制约较严重的低配电脑、移动终端所采用。
[0006]本发明公开的矢量图形快速多边形填充方法的技术方案的具体如下:
包括多边形第一预处理步骤、多边形剪裁步骤、填充多边形步骤,
所述多边形第一预处理步骤,将待处理文件中表示矢量多边形的点集合列表转换为能够表示矢量多边形处于屏幕显示区域内部分的点最小子集合列表,
所述待处理文件可以为可存储于各种例如R0M、RAM、SD卡、FLASH或者其他形式的可读介质上的电子海图文件或者其他类型的包含矢量图形的待处理文件。实施本发明的硬件设备可以为单个设备,如个人计算机、笔记本电脑、个人数字处理(PDA)、手机、平板等,也可以为多个设备,如分布式计算机、分布式计算单元、服务器客户机等,实施本发明的硬件设备通常会包含一个显示模块用于显示填充后的图形、一个运算单元或者图形处理单元来进行运算,同时还可能包括总线、处理系统、存储系统、一个或多个输入/输出系统、通信接口等一些基本的设备组件。
[0007]在当前显示区域内显示一块区域的时候,会包含大量的矢量多边形,而这些矢量多边形中有非常大比例的部分并不完全处于屏幕显示区域内,有些矢量多边形甚至只有小部分处于当前显示区域内,如图2所示为一个部分处于当前显示区域内的矢量多边形的情况,其一共包含有13个顶点的点列表集合,但是最小仅需要标识出的4个顶点就可以表示出包含全部的矢量多边形处于屏幕显示区域内的部分的矢量多边形子区域,这四个顶点构成此矢量多边形在此屏幕显示区域情况下的点最小子集合列表。后续的填充算法的处理时间与矢量多边形中待处理点集合的数量呈现非线性关系,填充算法消耗时间随处理点的数量急剧增加,具体的关系与后续填充算法的类型相关,根据算法类型不同存在0(n2)时间复杂度的情况,因此降低待剪裁、填充处理点的数量能够成倍的降低后续填充算法的处理时间,大大提高了原矢量图形多边形填充方法的处理效率,大大降低电子海图引擎中(显示S57等格式的电子海图)大量矢量图形元素的显示填充所带来的包括CPU(中央处理器)、图形显示处理器在内的运算芯片的计算资源消耗,提高了电子海图引擎的显示速率,降低了 CPU或者图形显示处理芯片的大量实时图形填充显示处理时的热量,在电子海图引擎的应用平台中,有效改善实时海图处理的延时,特别适于散热量、运算性能制约较严重的低配电脑、移动终端所采用。
[0008]所述多边形剪裁步骤,用于将点最小子集合列表转换为待填充矢量多边形点集合列表,所述待填充矢量多边形点集合列表只表达点最小子集合列表表达的区域的处于屏幕显示区域内的子区域;
所述多边形填充步骤,将待填充矢量多边形点集合列表着色填充为显示位图;
使用要求的颜色显示这些区间的像素,由于待填充矢量多边形点集合列表表示的总区域为屏幕显示区域,即用颜色将待填充矢量多边形点集合列表区间内的像素填充完成着色填充。
[0009]进一步的,所述多边形第一预处理步骤的一种具体的实现方式包括如下步骤,
a)九网格建立步骤,所述九网格建立步骤根据屏幕显示区域的各边界及各边界的延长线将整个坐标空间分隔为九个子区域,并对各子区域进行编码。如图1为一种建立所述子区域的方式,处于九网格中心的子区域即为屏幕显示区域,然后将各子区域用一个编码表
/Jn ο
[0010]b)初始化设置表示矢量多边形的点列表集合的网格标示,设置起始点。
[0011]c)由起始点按照矢量多边形连接顺序遍历点列表集合中的每一个点,判断该点是否在屏幕内,如果在屏幕内,则添加进点最小子集合列表;如果该点不在屏幕内,判断是否和前一个点是同一个点(第一个点会出现这种情况)。
[0012]f)如果新点和上一个点不是同一个,则判断新点和上一个点所在的区域(4bit)是否是同一个,如果不在同一个区域则添加进点最小子集合列表。
[0013]g)设置上一个点网格标示为当前新点网格标示,重复c步骤。
[0014]初始化点列表集合的网格标示即是按照点所在区域进行编码的过程,由于表达矢量多边形的点是按照连接顺序进行排列的,所以遍历时也需要按照矢量多边形的连接顺序进行遍历,可以为正时针也可以为逆时针遍历。
[0015]上述多边形第一预处理步骤的具体实现方式仅需要对每一个点进行一次遍历,其时间复杂度仅仅为0(n)即可将表示矢量多边形的点子列表集合转换为点最小子集合列表,而且即使是单次遍历的过程中通过将点列表集合中的点转换为所述九网格的子区域的网格标示仅需根据坐标进行一次比对判断,在电子海图的处理过程中比较非常容易实现,不需要额外的转换步骤,实现简洁,效率高,对额外的存储空间几乎无消耗。
[0016]进一步的,本发明还包括多边形第二预处理步骤,用于将由于矢量图形在不同比例尺下显示所导致的重复的点删除以及将处于同一条直线上起始点和终止点之外的点删除。
[0017]电子海图或者其他矢量图形文件的在不同比例尺情况下会出现一些重复的点或者同一条直线上起始点和终止点之外的点,由于这些重复的点或者同一条直线上起始点和终止点之外的点并不会影响矢量多边形的区域表达,但是无论是裁剪计算还是填充计算时都将要消耗额外的计算资源,因此通过O (η)时间复杂度的多边形第二预处理步骤可以节约下后续裁剪过程中额外产生的0(η)以上时间复杂度的时间消耗。
[0018]进一步的,在所述多边形第一预处理步骤中,所述九网格的区域编码占用4个比特位。相比于采用字节的编码方式,这里采用4比特位的编码速度更快,空间更节省,而且如果采用合适的编码顺序,之后的区域比较过程的比较计算耗时更小。本发明中用于处理的包含矢量多边形的文件包括但不仅限于电子海图文件或者其他GIS标准格式文件。
[0019]进一步的,本发明可采用实现所述多边形填充步骤可采用一种多边形扫描注入填充算法,其具体过程如下,按扫描线顺序计算扫描线与多边形的相交区间,再用指定的颜色依次显示所述相交区间的像素,所述相交区间的端点由计算所使用的扫描线与多边形边界线的交点获得。
[0020]上述多边形填充步骤采用一种多边形扫描转换算法,其具体处理流程如图5所述,过程表述如下:按扫描线顺序计算扫描线与多边形的相交区间,再用指定的颜色依次显示所述相交区间的像素,所述相交区间的端点可以通过计算扫描线与多边形边界线的交点获得。
[0021]对于一条扫描线,多边形的扫描转换过程可以分为四个步骤:
求交:计算扫描线与多边形各边的交点;
排序:把所有交点按X值递增顺序排序;
配对:第一个与第二个,第三个与第四个等等;每对交点代表扫描线与多边形的一个相交区间,
着色:把相交区间内的象素置成多边形颜色,把相交区间外的象素置成背景色。
[0022]进一步的,上述多边形剪裁步骤可采用Sutherland-Hodgman方法实现,实现过程如图3所示采用Sutherland-Hodgman方法的处理流程,具体分割处理策略表述如下:
将多边形关于矩形窗口的裁剪分解为多边形关于窗口四边所在直线的裁剪,流水线过程(左上右下):前边的结果是后边的输入,一次用窗口的一条边裁剪多边形,考虑窗口的一条边以及延长线构成的裁剪线,把平面分成两个部分:可见一侧,不可见一侧;则多边形的各条边的两端点S、P,它们与裁剪线的位置关系只有四种:情况(I)仅输出顶点P ;情况
(2)输出O个顶点;情况(3)输出线段SP与裁剪线的交点I ;情况(4)输出线段SP与裁剪线的交点I和终点P。
[0023]上述过程相当于每次用窗口的一条边界对待剪裁的多边形进行剪裁,由于一条边界把平面分成两个区域,一个区域包含有裁剪窗口,称为窗口内部区域,另一个区域不包含剪裁窗口,称之为窗口外部区域。这样通过一条窗口边界可把落在窗口外部区域的图像去掉,只保留窗口内部区域的图形,并把它作为下一次待裁剪的多边形,逐边重复上述剪裁过程即可得到矢量多边形处于屏幕显示区域内部的待填充矢量多边形点集合列表,完成剪裁。

【专利附图】

【附图说明】
[0024]图1为本发明所述矢量图形快速多边形填充方法的一种九网格子区域划分及区域编码图;
图2为本发明所述矢量图形快速多边形填充方法的一种部分处于当前显示区域内的矢量多边形的状态示意图;
图3为本发明所述矢量图形快速多边形填充方法中用Sutherland-Hodgman方法来实现多边形剪裁步骤的实施流程图;
图4为本发明所述矢量图形快速多边形填充方法中用Sutherland-Hodgman方法来进行多边形剪裁中的处理线段SP步骤的实施流程图;
图5本发明所述矢量图形快速多边形填充方法中用多边形扫描转换算法来实现多边形填充步骤的实施流程图。

【具体实施方式】
[0025]下面结合实施例及附图,对本发明作进一步地的详细说明,但本发明的实施方式不限于此。
[0026]如图1为本发明的九网格子区域划分及区域编码图,图中编码为0000的子区域为屏幕显示区域,屏幕显示区域的边界以及延长线将整个坐标空间划分为9个网格,分别编码为 1001、1000、1010、0001、0010、0101、0100、0110、0000。
[0027]图2为本发明中的一种部分处于当前显示区域内的矢量多边形的状态示意图,此矢量多边形由13个点构成的点列表集合表示,圈出的四个点是表示出包含全部的矢量多边形处于屏幕显示区域内的部分的矢量多边形子区域最少所需要的点集合,定义点最小子集合列表为包含全部的矢量多边形处于屏幕显示区域内的部分的矢量多边形子区域最少所需要的点的集合,那么这四个点构成此矢量多边形在此屏幕显示区域情况下的点最小子集合列表。
[0028]本发明所述矢量图形快速多边形填充方法的实施例1具体步骤包括多边形第一预处理步骤、多边形剪裁步骤、填充多边形步骤,
所述多边形第一预处理步骤,将待处理文件中表示矢量多边形的点集合列表转换为能够表示矢量多边形处于屏幕显示区域内部分的点最小子集合列表, 所述待处理文件可以为可存储于各种例如ROM、RAM、SD卡、FLASH或者其他形式的可读介质上的电子海图文件或者其他类型的包含矢量图形的待处理文件。实施本发明的硬件设备可以为单个设备,如个人计算机、笔记本电脑、个人数字处理(PDA)、手机、平板等,也可以为多个设备,如分布式计算机、分布式计算单元、服务器客户机等,实施本发明的硬件设备通常会包含一个显示模块用于显示填充后的图形、一个运算单元或者图形处理单元来进行运算,同时还可能包括总线、处理系统、存储系统、一个或多个输入/输出系统、通信接口等一些基本的设备组件。
[0029]在当前显示区域内显示一块区域的时候,会包含大量的矢量多边形,而这些矢量多边形中有非常大比例的部分并不完全处于屏幕显示区域内,有些矢量多边形甚至只有小部分处于当前显示区域内,如图2所示为一个部分处于当前显示区域内的矢量多边形的情况,其一共包含有13个顶点的点列表集合,但是最小仅需要标识出的4个顶点就可以表示出包含全部的矢量多边形处于屏幕显示区域内的部分的矢量多边形子区域,这四个顶点构成此矢量多边形在此屏幕显示区域情况下的点最小子集合列表。后续的填充算法的处理时间与矢量多边形中待处理点集合的数量呈现非线性关系,填充算法消耗时间随处理点的数量急剧增加,具体的关系与后续填充算法的类型相关,根据算法类型不同存在0(n2)时间复杂度的情况,因此降低待剪裁、填充处理点的数量能够成倍的降低后续填充算法的处理时间,大大提高了原矢量图形多边形填充方法的处理效率,大大降低电子海图引擎中(显示S57等格式的电子海图)大量矢量图形元素的显示填充所带来的包括CPU(中央处理器)、图形显示处理器在内的运算芯片的计算资源消耗,提高了电子海图引擎的显示速率,降低了 CPU或者图形显示处理芯片的大量实时图形填充显示处理时的热量,在电子海图引擎的应用平台中,有效改善实时海图处理的延时,特别适于散热量、运算性能制约较严重的低配电脑、移动终端所采用。
[0030]所述多边形剪裁步骤将点最小子集合列表表示的矢量多边形的处于屏幕显示区域外的部分裁剪,得到只保留最小子集合列表表示的矢量多边形处于屏幕显示区域内部的待填充矢量多边形点集合列表;
所述多边形填充步骤,将待填充矢量多边形点集合列表着色填充;
使用要求的颜色显示这些区间的像素,由于待填充矢量多边形点集合列表表示的总区域为屏幕显示区域,即用颜色将待填充矢量多边形点集合列表区间内的像素填充完成着色填充。
[0031]所述多边形第一预处理步骤的一种具体的实施方式如下,
a)九网格建立步骤,所述九网格建立步骤根据屏幕显示区域的各边界及各边界的延长线将整个坐标空间分隔为九个子区域,并对各子区域进行编码。如图1为一种建立所述子区域的方式,处于九网格中心的子区域即为屏幕显示区域,然后将各子区域用一个编码表
/Jn ο
[0032]b)初始化设置表示矢量多边形的点列表集合的网格标示,设置起始点。
[0033]c)由起始点按照矢量多边形连接顺序遍历点列表集合中的每一个点,判断该点是否在屏幕内,如果在屏幕内,则添加进点最小子集合列表;如果该点不在屏幕内,判断是否和前一个点是同一个点(第一个点会出现这种情况)。
[0034]f)如果新点和上一个点不是同一个,则判断新点和上一个点所在的区域是否是同一个,如果不在同一个区域则添加进点最小子集合列表。
[0035]g)设置上一个点网格标示为当前新点网格标示,重复c步骤。
[0036]初始化点列表集合的网格标示即是按照点所在区域进行编码的过程,由于表达矢量多边形的点是按照连接顺序进行排列的,所以遍历时也需要按照矢量多边形的连接顺序进行遍历,可以为正时针也可以为逆时针遍历。
[0037]上述多边形第一预处理步骤的具体实现方式仅需要对每一个点进行一次遍历,其时间复杂度仅仅为0(n)即可将表示矢量多边形的点子列表集合转换为点最小子集合列表,而且即使是单次遍历的过程中通过将点列表集合中的点转换为所述九网格的子区域的网格标示仅需根据坐标进行一次比对判断,在电子海图的处理过程中比较非常容易实现,不需要额外的转换步骤,实现简洁,效率高,对额外的存储空间几乎无消耗。
[0038]在对所述九网格的区域进行编码时,编码占用4个比特位。相比于采用字节的编码方式,这里采用4比特位的编码速度更快,空间更节省,而且如果采用合适的编码顺序,之后的区域比较过程的比较计算耗时更小。本发明中用于处理的包含矢量多边形的文件包括但不仅限于电子海图文件或者其他GIS标准格式文件。
[0039]所述多边形剪裁步骤具体可采用Sutherland-Hodgman方法实现,实现过程如图3所示采用Sutherland-Hodgman方法的处理流程,具体分割处理策略表述如下:
将多边形关于矩形窗口的裁剪分解为多边形关于窗口四边所在直线的裁剪,流水线过程(左上右下):前边的结果是后边的输入,一次用窗口的一条边裁剪多边形,考虑窗口的一条边以及延长线构成的裁剪线,把平面分成两个部分:可见一侧,不可见一侧;则多边形的各条边的两端点S、P,它们与裁剪线的位置关系只有四种:情况(I)仅输出顶点P ;情况
(2)输出O个顶点;情况(3)输出线段SP与裁剪线的交点I ;情况(4)输出线段SP与裁剪线的交点I和终点P。
[0040]上述过程相当于每次用窗口的一条边界对待剪裁的多边形进行剪裁,由于一条边界把平面分成两个区域,一个区域包含有裁剪窗口,称为窗口内部区域,另一个区域不包含剪裁窗口,称之为窗口外部区域。这样通过一条窗口边界可把落在窗口外部区域的图像去掉,只保留窗口内部区域的图形,并把它作为下一次待裁剪的多边形,逐边重复上述剪裁过程即可得到矢量多边形处于屏幕显示区域内部的待填充矢量多边形点集合列表,完成剪裁。
[0041]所述多边形填充步骤具体实现可采用一种多边形扫描注入填充算法,其具体过程如下,按扫描线顺序计算扫描线与多边形的相交区间,再用指定的颜色依次显示所述相交区间的像素,所述相交区间的端点由计算所使用的扫描线与多边形边界线的交点获得。
[0042]上述多边形填充步骤采用一种多边形扫描转换算法,其具体处理流程如图5所述,过程表述如下:按扫描线顺序计算扫描线与多边形的相交区间,再用指定的颜色依次显示所述相交区间的像素,所述相交区间的端点可以通过计算扫描线与多边形边界线的交点获得。
[0043]对于一条扫描线,多边形的扫描转换过程可以分为四个步骤:
求交:计算扫描线与多边形各边的交点;
排序:把所有交点按X值递增顺序排序;
配对:第一个与第二个,第三个与第四个等等;每对交点代表扫描线与多边形的一个相交区间;
着色:把相交区间内的象素置成多边形颜色,把相交区间外的象素置成背景色。
[0044]如表I为整体填充过程的效率与改进前的整体填充效率的比较,由于各个海图文件的矢量多边形的数目与屏幕显示区域的相对位置、表示点数等情况变化因素,单个海图文件的提升效果有一定起伏,这里采用大量多次数的叠加进行比较,由表中统计结果可以看到的是改进后的整体效率是改进前效率的2.6倍(260%)。同时需要注意的是,上述效率提升是对整体处理效率的提升,并且是处于海图文件的矢量多边形数量、点数处于一个相对较低水平的情况下,如果剔除掉改进前后相同的填充算法的耗时,改进部分对剪裁过程的实际效率提升是远大于2.6倍的,同时随着海图文件的矢量多边形数量、点数增加,实际效率提升也还将有进一步提升。
[0045]作为本发明的实施例2,本发明还包括多边形第二预处理步骤,用于将由于矢量图形在不同比例尺下显示所导致的重复的点删除以及将处于同一条直线上起始点和终止点之外的点删除。
[0046]电子海图或者其他矢量图形文件的在不同比例尺情况下会出现一些重复的点或者同一条直线上起始点和终止点之外的点,由于这些重复的点或者同一条直线上起始点和终止点之外的点并不会影响矢量多边形的区域表达,但是无论是裁剪计算还是填充计算时都将要消耗额外的计算资源,因此通过0(n)时间复杂度的多边形第二预处理步骤可以节约下后续裁剪过程中额外产生的O (η)以上时间复杂度的时间消耗。
[0047]表I

【权利要求】
1.矢量图形快速多边形填充方法,其特征在于,包括如下步骤 多边形第一预处理步骤,所述多边形第一预处理步骤用于将待处理文件中表示矢量多边形的点集合列表转换为能够表示矢量多边形处于屏幕显示区域内部分的点最小子集合列表; 所述多边形剪裁步骤,用于将点最小子集合列表转换为待填充矢量多边形点集合列表,所述待填充矢量多边形点集合列表只表达点最小子集合列表表达的区域的处于屏幕显示区域内的子区域; 所述多边形填充步骤,将待填充矢量多边形点集合列表着色填充为显示位图。
2.如权利要求1所述矢量图形快速多边形填充方法,其特征还在于,所述多边形第一预处理步骤的实现方式包括如下步骤: a)九网格建立步骤,所述九网格建立步骤根据屏幕显示区域的各边界及各边界的延长线将整个坐标空间分隔为九个子区域,并对各子区域进行编码; b)初始化设置表示矢量多边形的点列表集合的网格标示,设置起始点; c)由起始点按照矢量多边形连接顺序遍历点列表集合中的每一个点,判断该点是否在屏幕内,如果在屏幕内,则添加进点最小子集合列表;如果该点不在屏幕内,判断是否和前一个点是同一个点; f)如果新点和上一个点不是同一个,则判断新点和上一个点所在的区域是否是同一个,如果不在同一个区域则添加进点最小子集合列表; g)设置上一个点网格标示为当前新点网格标示,重复C步骤。
3.如权利要求2所述矢量图形快速多边形填充方法,其特征还在于,所述九网格的区域编码占用4个比特位。
4.如权利要求1所述矢量图形快速多边形填充方法,其特征还在于,还包括多边形第二预处理步骤,用于将由于矢量图形在不同比例尺下显示所导致的重复的点删除以及将处于同一条直线上起始点和终止点之外的点删除。
5.如权利要求1所述矢量图形快速多边形填充方法,其特征还在于,所述多边形剪裁步骤采用Sutherland-Hodgman方法实现。
6.如权利要求1所述矢量图形快速多边形填充方法,其特征还在于,所述多边形填充步骤采用多边形扫描注入填充方法实现。
【文档编号】G06T1/20GK104182928SQ201410404744
【公开日】2014年12月3日 申请日期:2014年8月15日 优先权日:2014年8月15日
【发明者】刘宇, 卢新平 申请人:成都天奥信息科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1