首页> 中国专利> 一种基于“浮岛”冒泡排序的自动等值线填充方法

一种基于“浮岛”冒泡排序的自动等值线填充方法

摘要

本发明公开了一种基于“浮岛”冒泡排序的自动等值线填充方法,涉及地质勘探中的数据可视化处理领域,具体涉及到等值线的自动填充方法技术领域,解决现有技术中采用拓补关系进行等值线填充时,拓补关系较为复杂,要依赖于等值线的获取方法,不能单独实现需要,从而造成填充效率低的问题。本发明对等值线区域间的拓补关系进行抽象和简化,通过提出“浮岛”和“海面”的概念,运用类似于冒泡排序法的算法对等值区域的填充顺序进行排序,可以实现对大量具有复杂拓补关系的等值线进行快速自动填充。本发明用于等值线的快速填充。

著录项

  • 公开/公告号CN107016712A

    专利类型发明专利

  • 公开/公告日2017-08-04

    原文格式PDF

  • 申请/专利权人 电子科技大学;

    申请/专利号CN201710233428.4

  • 申请日2017-04-11

  • 分类号

  • 代理机构成都弘毅天承知识产权代理有限公司;

  • 代理人徐金琼

  • 地址 611731 四川省成都市高新区(西区)西源大道2006号

  • 入库时间 2023-06-19 02:58:05

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-06-11

    授权

    授权

  • 2017-08-29

    实质审查的生效 IPC(主分类):G06T11/20 申请日:20170411

    实质审查的生效

  • 2017-08-04

    公开

    公开

说明书

技术领域

一种基于“浮岛”冒泡排序的自动等值线填充方法,用于等值线的快速填充,涉及地质勘探中的数据可视化处理领域,具体涉及到等值线的自动填充方法技术领域。

背景技术

随着计算机的快速发展,计算机软件的数据可视化能力也在快速提升,同时绘制等值线图作为较基本的一种数据可视化手段,有着十分广泛的应用。目前在等值线的获取方面有着比较成熟的算法,例如:基于三角形网络的等值线获取方法。然而在等值线自动填充方面,目前常用的方法有扫描填充和区域填充。

扫描填充法是通过逐点扫描检测的方法来确定要填充区域的颜色,该方法简单可靠,实现起来较为容易。但是填充速度缓慢,运行效率较低,而且由于扫描填充算法不是矢量运算,当对等值线图进行矢量缩放后需要重新进行等值线填充。这些先天的缺点,极大的限制了扫描填充算法的应用。

区域填充法属于矢量填充算法,其常用方法是①寻找等值线图中的连通区域,然后对连通区域进行填充;②确定各个区域的拓补关系,然后按照拓补关系对等值线进行填充,例如:“拓补包含二叉树法”;③确定各个区域的包含关系,然后按照区域包含关系,以先填充大区域、后填充小区域的原则进行区域填充。由于等值线的连通区域及拓补关系较为复杂,因此方法①、②的算法单独实现起来比较困难,在算法实现时,通常在等值线的获取过程中就开始考虑等值线的连通区域或拓补关系,对等值线获取算法的依赖性很强。方法③一般是通过递归的方法依次获得从小到大排列等值区域,算法实现起来较方法①、②更为简单且可以独立实现,但是当要处理的等值线条数较多时,算法运行的时间复杂度会大大提升,运行效率大大下降,因此,常规的排序法只适合确定条数较少的等值线的区域包含关系。

发明内容

本发明针对上述不足之处提供了一种基于“浮岛”冒泡排序的自动等值线填充方法,解决现有技术中采用拓补关系进行等值线填充时,拓补关系较为复杂,要依赖于等值线的获取方法,不能单独实现,从而造成填充效率低的问题。

本发明采用的技术方案如下:

一种基于“浮岛”冒泡排序的自动等值线填充方法,其特征在于,如下步骤:

(1)获取等值线,输入待填充等值线的信息和等值线图的边界信息;

(2)根据步骤(1)输入的信息,对所有等值线进行封闭处理,得到多个“浮岛”,即得到多个覆盖在背景区域上的多边形闭合区域;

(3)分别计算出每个“浮岛”的上、下、左、右四条边界信息;

(4)对所有“浮岛”按照绘制的先后顺序进行排序;

(5)为“海面”及所有的“浮岛”各自分配一个要填充的颜色值,其中,“海面”是指背景区域;

(6)使用OpenGL先对“海面”进行填充,然后对所有的“浮岛”按照排列好的顺序依次填充,得到填充后的等值线图。

进一步,所述步骤(1)中,输入待填充等值线的信息为:待填充等值线的总条数N;每条等值线的高程值vn;每条等值线所包含的坐标点的总个数Mn;每条等值线的所有坐标点信息(xnm,ynm)。

进一步,所述步骤(2)是根据等值线的起点(xn0,yn0)和终点的坐标信息,按照等值线与“海面”边界的相交情况,为等值线添加边界点,对所有等值线进行封闭处理。

进一步,按照等值线与“海面”边界的相交情况,为等值线添加边界点的具体步骤如下:

(21)判断“海面”的边界是否为矩形;

(22)如果“海面”的边界是矩形,根据等值线与“海面”边界的位置关系,可将等值线分为以下四类:

等值线起点和终点相同,即等值线闭合时,不用为等值线添加闭合的点;

等值线起点和终点在“海面”边界的同一条边上,不用为等值线添加闭合的点;

等值线起点和终点分别在“海面”边界的两条邻边上,在矩形边界的四个顶点中选取一个可以使等值线闭合的点添加到等值线坐标中;

等值线起点和终点分别在矩形边界的两条对边上,若等值线横跨在“海面”边界的两条纵向的边上,将“海面”边界上侧的两个顶点添加到等值线坐标中,作为闭合的点,若等值线横跨在“海面”边界的两条横向的边上,将“海面”边界右侧的两个顶点添加到等值线坐标中,作为闭合的点;

(23)如果“海面”的边界是不规则的多边形,根据等值线与边界的位置关系,可将等值线分为以下二类:

等值线起点和终点相同,即等值线闭合时,不用为等值线添加闭合的点;

等值线起点和终点在“海面”边界上时,“海面”边界可以被等值线起点和终点的连线分割成a部分和b部分,判断a部分中等值线坐标点总个数是否多于b部分中等值线坐标点总个数,如果是,将b部分中“海面”边界坐标添加到等值线坐标中,作为闭合的点,否则,将b部分中“海面”边界坐标添加到等值线坐标中,作为闭合的点。

进一步,所述步骤(3)的计算公式如下:

leftn=min{xnm},

rightn=max{xnm},

topn=max{ynm},

bottomn=min{ynm},

其中,leftn为左边界、rightn为右边界,topn为上边界,bottomn为下边界,xnm代表第n条封闭处理后的等值线的第m个坐标点的横坐标,ynm代表第n条封闭处理后的等值线的第m个坐标点的纵坐标。

进一步,所述步骤(4)的具体流程为:

(41)将N个“浮岛”按照0,1,2…N-1的顺序进行编号,并获得各编号之间的“浮岛”的初始包含关系,定义三个用于排序时计数的整数变量i、j、k,其中,i=0,1,2…N-1;j=0,1,2…N-1;k=1,2…N-1,且令变量i和j的初始值都为0;

(42)判断变量i的值是否小于N-1,若是,则令变量j的值为0,然后执行(43),否则结束步骤(4);

(43)判断变量j的值是否小于N-i-1,若是,则令变量k的值为1,然后执行(44),否则先将变量i的值加1,然后执行(42);

(44)判断变量k的值是否小于N-i-j,若是,则执行(45),否则先将变量j的值加1,然后执行(43);

(45)判断编号为j的“浮岛”与编号为j+k的“浮岛”的包含关系,如果编号为j的“浮岛”在编号为j+k的“浮岛”内,则先将两个“浮岛”的编号顺序进行互换,并将j的值加1,然后执行(43);如果编号为j+k的“浮岛”在编号为j的“浮岛”内,则先将j的值加1,然后执行(43);如果两个编号为j的“浮岛”与编号为j+k的“浮岛”之间没有包含关系,则先将k的值加1,然后执行(44);

其中,编号为j的“浮岛”与编号为j+k的“浮岛”之间的包含关系的判断,如下所示:

(a)若leftj≤leftj+k&rightj≥rightj+k&bottomj≤bottomj+k&topj≥topj+k,说明编号为j+k的“浮岛”在编号为j的“浮岛”内;

(b)若leftj≥leftj+k&rightj≤rightj+k&bottomj≥bottomj+k&topj≤topj+k,说明编号为j的“浮岛”在编号为j+k的“浮岛”内;

(c)若leftj、leftj+k、rightj、rightj+k、bottomj、bottomj+k、topj、topj+k之间的关系不满足(a)、(b)两种情况中的任何一种,则编号为j的“浮岛”与编号为j+k的“浮岛”之间互不包含。

进一步,所述步骤(5)的具体流程为:

(51)首先计算出所有“浮岛”高程值中的最大值vmax和最小值vmin,公式如下:

vmax=max{vn},

vmin=min{vn},

(52)根据步骤(51)的计算结果,然后计算出中间变量h,公式如下:

(53)将中间变量h化为整数,根据h的取值范围和“浮岛”的编号依次计算每个“浮岛”的颜色值,并将计算的颜色值添加为“浮岛”的颜色属性,“浮岛”的颜色使用标准的24位RGBA色彩表示,设颜色值为(r,g,b,255),利用下式计算r,g,b的值:

(54)最后从排好序的“浮岛”中找到编号为0的“浮岛”a的高程值v1以及任意一个包含在编号为0的“浮岛”a中的“浮岛”b的高程值v2;若v1>v2,则“海面”的颜色比“浮岛”a低一个色彩等级;反之,“海面”的颜色比浮岛a高一个色彩等级。

进一步,所述步骤(6)的具体流程为:

(61)将待填充对象的实际边界坐标转换为显示屏幕上的坐标,即根据“海面”或“浮岛”边界点的实际坐标间距与屏幕像素点坐标间距的比例关系,将待填充对象边界的实际坐标转换为屏幕像素点坐标;

(62)为要填充的对象分配颜色,即调用OpenGL中的glcolor4i函数,并将glcolor4i函数参数设置为步骤(53)中得到的待填充对象的颜色值(r,g,b,255);

(63)创建多边形区域,即调用OpenGL中的glbegin函数,并将glbegin函数参数设置为GL_POLYGON,代表将要绘制的对象为要填充的多边形;

(64)将步骤(61)中得到的屏幕像素点坐标添加到步骤(63)创建的多边形中,作为多边形的顶点坐标,即多次循环调用OpenGL中的glVertex2i函数,将要绘制对象的屏幕像素点坐标传递给函数,得到完整的多边形区域;

(65)调用OpenGL中的glEnd函数和glFlush函数对(64)中得到的完整的多边形区域进行填充,及显示刷新。

综上所述,由于采用了上述技术方案,本发明的有益效果是:

1、本发明运用一种类似于冒泡排序法的最优排序算法对等值区域的填充顺序进行排序,同时利用了OpenGL区域填充的高效性,不依赖于等值线的寻找方式,所需参数简单,计算量小且算法可以独立实现,在实际使用与维护时更加方便;

2、本发明使用“浮岛”的概念对等值线区域间的拓补关系进行高度的简化,使等值线的自动填充更加灵活简便,适应范围也更加广泛,在处理大量具有复杂拓补关系的等值线时效率更高,同时在处理不规则边界的等值线图以及地质分析中的含有断层的等值线图时也有很大的优点。

3、在处理大幅等值线图方面,本发明较常规的逐点扫描填充法在填充效率上有很大的提升,对于附图3中的等值线填充耗时约37ms(使用inteli5-4258UCPU测试,主频2.40GHZ),其中排序耗时约25ms,绘图耗时约12ms,而常规的逐点扫描填充算法在处理附图3大小的等值线图时,填充耗时在100ms以上,且当等值线图面积变大时,本算法中的排序耗时基本不变,只是绘图耗时会略有增加,而常规的逐点扫描填充法的耗时将会随面积的增大而呈正比增加;

4、在处理具有复杂拓补关系的等值线方面,由于本方法的算法结构简单、固定,在具体的程序设计时较为简单,实现本算法所需的代码量较小,而常规的矢量处理算法需要考虑等值线拓补关系的定义,查找,判断等步骤,实现起来较为复杂;常规的等值线分类算法在设计时需要根据实际考虑等值线的分类情况,算法结构不固定,增加了使用的难度。

附图说明

图1为本发明的流程示意图;

图2为本发明中浮岛进行排序的结构示意图;

图3为本发明中等值线自动填充效果图;其中(a)为原始等值线,(b)为填充后的等值线。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

通过观察等值线图可以发现,所有的彩色等值线图都可以由一种颜色的背景区域以及覆盖在背景区域上的不同颜色的多边形闭合区域构成,且存在小多边形区域覆盖在大多边形区域上的情况。为了更加形象的解释,在此将等值线图中背景区域命名为“海面”,将覆盖在背景区域以上的多边形闭合区域命名为“浮岛”。

两者具有以下特点:①每幅要填充的等值线图都是由一个“海面”及多个“浮岛”组成;②每个“海面”及“浮岛”都具有自己的边界坐标(即封闭处理后的等值线所构成的多边形的顶点坐标信息)和颜色(即根据等值线的高程值确定的填充区域的色彩)信息;③“海面”上可以覆盖多个“浮岛”,一个“大”的“浮岛”上可以覆盖多个“小”的“浮岛”。

有了以上的概念,就可以根据区域的特点获取“浮岛”的边界信息,然后根据边界的包含关系使用一种基于“浮岛”冒泡排序法对“浮岛”按照要填充的先后关系进行排序。最后根据所排列的顺序,依次绘制“海面”和各个“浮岛”,便可得到填充后的等值线图。具体流程如下:

一种基于“浮岛”冒泡排序的自动等值线填充方法,如下步骤:

(1)获取等值线,输入待填充等值线的信息和等值线图的边界信息;输入待填充等值线的信息为:待填充等值线的总条数N;每条等值线的高程值vn;每条等值线所包含的坐标点的总个数Mn;每条等值线的所有坐标点信息(xnm,ynm)。

(2)根据步骤(1)输入的信息,对所有等值线进行封闭处理,得到多个“浮岛”,即得到多个覆盖在背景区域上的多边形闭合区域;本步骤是根据步骤(1)中的等值线的起点(xn0,yn0)和终点的坐标信息,按照等值线与边界的相交情况,为等值线添加边界点,对所有等值线进行封闭处理。按照等值线与边界的相交情况,为等值线添加边界点的具体步骤如下:

(21)判断“海面”的边界是否为矩形;

(22)如果“海面”的边界是矩形,根据等值线与“海面”边界的位置关系,可将等值线分为以下四类:

等值线起点和终点相同,即等值线闭合时,不用为等值线添加闭合的点;

等值线起点和终点在“海面”边界的同一条边上,不用为等值线添加闭合的点;

等值线起点和终点分别在“海面”边界的两条邻边上,在矩形边界的四个顶点中选取一个可以使等值线闭合的点添加到等值线坐标中,作为闭合的点;

等值线起点和终点分别在矩形边界的两条对边上,若等值线横跨在“海面”边界的两条纵向的边上,将“海面”边界上侧的两个顶点添加到等值线坐标中,作为闭合的点,若等值线横跨在“海面”边界的两条横向的边上,将“海面”边界右侧的两个顶点添加到等值线坐标中,作为闭合的点;

(23)如果“海面”的边界是不规则的多边形,根据等值线与边界的位置关系,可将等值线分为以下二类:

等值线起点和终点相同,即等值线闭合时,不用为等值线添加闭合的点;

等值线起点和终点在“海面”边界上时,“海面”边界可以被等值线起点和终点的连线分割成a部分和b部分,判断选择a部分中等值线坐标点总个数是否多于b部分中等值线坐标点总个数,如果是,将b部分中“海面”边界坐标添加到等值线坐标中,作为闭合的点,否则,将b部分中“海面”边界坐标添加到等值线坐标中,作为闭合的点。

(3)分别计算出每个“浮岛”的上、下、左、右四条边界信息;计算公式如下:

leftn=min{xnm},

rightn=max{xnm},

topn=max{ynm},

bottomn=min{ynm},

其中,leftn为左边界、rightn为右边界,topn为上边界,bottomn为下边界,xnm代表第n条封闭处理后的等值线的第m个坐标点的横坐标,ynm代表第n条封闭处理后的等值线的第m个坐标点的纵坐标。

(4)对所有“浮岛”按照绘制的先后顺序进行排序;具体流程为:

(41)将N个浮岛按照0,1,2…N-1的顺序进行编号,并获得各编号之间的“浮岛”的初始包含关系,定义三个用于排序时计数的整数变量i、j、k,其中,i=0,1,2…N-1;j=0,1,2…N-1;k=1,2…N-1,且令变量i和j的初始值都为0,;

(42):判断变量i的值是否小于N-1,若是,则令变量j的值为0,然后执行(43),否则结束步骤(4);

(43):判断变量j的值是否小于N-i-1,若是,则令变量k的值为1,然后执行(44),否则先将变量i的值加1,然后执行(42);

(44):判断变量k的值是否小于N-i-j,若是,则执行(45),否则先将变量j的值加1,然后执行(43);

(45):判断编号为j的“浮岛”与编号为j+k的浮岛的包含关系,如果编号为j的“浮岛”在编号为j+k的“浮岛”内,则先将两个“浮岛”的编号顺序进行互换,并将j的值加1,然后执行(43);如果编号为j+k的“浮岛”在编号为j的“浮岛”内,则先将j的值加1,然后执行(43);如果两个编号为j的“浮岛”与编号为j+k的“浮岛”之间没有包含关系,则先将k的值加1,然后执行(44);

其中,编号为j的“浮岛”与编号为j+k的“浮岛”间的包含关系的判断,如下所示:

(a)若leftj≤leftj+k&rightj≥rightj+k&bottomj≤bottomj+k&topj≥topj+k,说明编号为j+k的“浮岛”在编号为j的“浮岛”内;

(b)若leftj≥leftj+k&rightj≤rightj+k&bottomj≥bottomj+k&topj≤topj+k,说明编号为j的“浮岛”在编号为j+k的“浮岛”内;

(c)若leftj、leftj+k、rightj、rightj+k、bottomj、bottomj+k、topj、topj+k之间的关系不满足(a)、(b)两种情况中的任何一种,则编号为j的“浮岛”与编号为j+k的“浮岛”之间互不包含。

具体实施如下:N=5,输入的等值线的顺序按照编号0,1,2,3,4的顺序排列,即是对“浮岛”的编号,其中编号为1的“浮岛”包含于编号为2的“浮岛”,编号为2的“浮岛”包含于编号为4的“浮岛”,编号为0的“浮岛”包含于编号为3的“浮岛”,编号为1的“浮岛”、编号为2的“浮岛”、编号为4的“浮岛”与编号为0的“浮岛”、编号为3的“浮岛”之间没有包含关系,此时的“浮岛”的排列是乱序,如果简单的按照此顺序进行填充,将会导致一部分的等值线被覆盖,所以需要对此进行排序。具体如下:

执行(41)得i=0,j=0,k=1;执行(42),(0<4),得i=0,j=0,k=1;执行(43),(0<4),得i=0,j=0,k=1;执行(44),(1<5),得i=0,j=0,k=1;执行(45),编号为0的“浮岛”与编号为1的“浮岛”之间互不包含,k=2,跳转到(44);

执行(44),(2<5),得i=0,j=0,k=2;执行(45),编号为0的“浮岛”与编号为2的“浮岛”之间互不包含,k=3,跳转到(44);

执行(44),(3<5),得i=0,j=0,k=3;执行(45),编号为0的“浮岛”在编号为3的“浮岛”内,交换两者顺序,j=1,跳转到(43);

执行(43),(1<4),得i=0,j=1,k=1;执行(44),(1<3),得i=0,j=1,k=1;执行(45),编号为1的“浮岛”在编号为2的“浮岛”内,交换两者顺序,j=2,跳转到(43);

执行(43),(2<4),得i=0,j=2,k=1;执行(44),(1<3),得i=0,j=2,k=1;执行(45),编号为2的“浮岛”与编号为3的“浮岛”之间互不包含,k=2,跳转到(44)。

执行(44),(2<3),得i=0,j=2,k=2;执行(45),编号为2的“浮岛”在编号为4的“浮岛”内,交换两者顺序,j=3,跳转到(43);

执行(43),(3<4),得i=0,j=3,k=1;执行(44),(1<2),得i=0,j=3,k=1;执行(45),编号为3的“浮岛”与编号为4的“浮岛”之间互不包含,k=2,跳转到(44);

执行(44),(2=2),j=4,跳转到(43);执行(43),(4=4),i=1,跳转到(42);执行(42),(1<4),得i=1,j=0;执行(43),(0<3),得i=1,j=0,k=1;执行(44),(1<4),得i=1,j=0,k=1;执行(45),编号为0的“浮岛”与编号为1的“浮岛”之间互不包含,k=2,跳转到(44);

执行(44),(2<4),得i=1,j=0,k=2;执行(45),编号为0的“浮岛”与编号为2的“浮岛”之间互不包含,k=3,跳转到(44);

执行(44),(3<4),得i=1,j=0,k=3;执行(45),编号为3的“浮岛”在编号为0的“浮岛”内,j=1,跳转到(43);

执行(43),(1<3),得i=1,j=1,k=1;执行(44),(1<3),得i=1,j=1,k=1;执行(45),编号为1的“浮岛”在编号为2的“浮岛”内,交换两者顺序,j=2,跳转到(43);

执行(43),(2<3),得i=1,j=2,k=1;执行(44),(1<2),得i=1,j=2,k=1;执行(45),编号为1的“浮岛”与编号为2的“浮岛”之间互不包含,k=2,跳转到(44)。

执行(44),(2=2),得j=3,跳转到(43);执行(43),(3=3),得i=2,跳转到(42);执行(42),(2<4),得i=2,j=0;执行(43),(0<2),得i=2,j=0,k=1;执行(44),(1<3),得i=2,j=0,k=1;执行(45),编号为0的“浮岛”与编号为1的“浮岛”之间互不包含,k=2,跳转到(44);

执行(44),(2<3),得i=2,j=0,k=2;执行(45),编号为0的“浮岛”与编号为2的“浮岛”之间互不包含,k=3,跳转到(44);

执行(44),(3=3),j=1,跳转到(43);执行(43),(1<2),得i=2,j=1,k=1;执行(44),(1<2),得i=2,j=1,k=1;执行(45),编号为2的“浮岛”在编号为1的“浮岛”内,j=2,跳转到(43);

执行(43),(2=2),i=3,跳转到(42);执行(42),(3<4),得j=0;执行(43),(0<1),得i=3,j=0,k=1;执行(44),(1<2),得i=3,j=0,k=1;执行(45),编号为0的“浮岛”与编号为1的“浮岛”之间互不包含,k=2,跳转到(44);

执行(44),(2=2),得j=1,跳转到(43);执行(43),(1=1),得i=4,跳转到(42);执行(42),(4=4),结束步骤(4)。

通过上述步骤,对乱序的浮岛进行排列后,再按照排列的编号顺序从小到大对浮岛依次进行填充,可以得到完整的等值线图。

(5)为“海面”及所有的“浮岛”各自分配一个要填充的颜色值,其中,“海面”是指背景区域;具体流程为:

(51)首先计算出所有“浮岛”高程值中的最大值vmax和最小值vmin,公式如下:

vmax=max{vn},

vmin=min{vn},

(52)根据步骤(51)的计算结果,然后计算出中间变量h,公式如下:

(53)将中间变量h化为整数,根据h的取值范围和“浮岛”的编号依次计算每个“浮岛”的颜色值,并将计算的颜色值添加为“浮岛”的颜色属性,“浮岛”的颜色使用标准的24位RGBA色彩表示,设颜色值为(r,g,b,255),利用下式计算r,g,b的值:

(54)最后从排好序的“浮岛”中找到编号为0的“浮岛”a的高程值v1以及任意一个包含在编号为0的“浮岛”a中的“浮岛”b的高程值v2。;若v1>v2,则“海面”的颜色比“浮岛”a低一个色彩等级;反之,“海面”的颜色比浮岛a高一个色彩等级。

(6)使用OpenGL先对“海面”进行填充,然后对所有的“浮岛”按照排列好的顺序依次填充,得到填充后的等值线图。具体流程为:

(61)将待填充对象的实际边界坐标转换为显示屏幕上的坐标,即根据“海面”或“浮岛”边界点的实际坐标间距与屏幕像素点坐标间距的比例关系,将待填充对象边界的实际坐标转换为屏幕像素点坐标;

(62)为要填充的对象分配颜色,即调用OpenGL中的glcolor4i函数,并将glcolor4i函数参数设置为步骤(53)中得到的待填充对象的颜色值(r,g,b,255);

(63)创建多边形区域,即调用OpenGL中的glbegin函数,并将glbegin函数参数设置为GL_POLYGON,代表将要绘制的对象为要填充的多边形,此时得到的多边形区域还不完整,还没有顶点坐标;

(64)将步骤(61)中得到的屏幕像素点坐标添加到步骤(63)创建的多边形中,作为多边形的顶点坐标,即多次循环调用OpenGL中的glVertex2i函数,将要绘制对象的屏幕像素点坐标传递给函数,得到完整的多边形区域;

(65)调用OpenGL中的glEnd函数和glFlush函数对(64)中得到的完整的多边形区域进行填充,及显示刷新。

本发明对等值线区域间的拓补关系进行抽象和简化,通过提出“浮岛”和“海面”的概念,然后运用一种类似于冒泡排序法的算法对等值区域的填充顺序进行排序,可以实现对大量具有复杂拓补关系的等值线进行快速自动填充,方法简单高效,代码量小而且可以独立实现,不依赖于等值线的获取方法,为等值线的自动填充提供了一种新的简单有效的方法。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号