一种面向TIN构建的Hilbert排序方法

文档序号:10595141阅读:285来源:国知局
一种面向TIN构建的Hilbert排序方法
【专利摘要】本发明涉及一种面向TIN构建的Hilbert排序方法。该方法包括:(1)读入待排序的二维点集P;(2)分解点集P以调整点集P内点的存储顺序;(3)分解点集PW以调整点集PW中点的存储顺序;(4)分解点集PE以调整点集PE中点的存储顺序;(5)判断子点集是否分解完成;(6)等待所有子点集分解结束,即完成点集的Hilbert排序。本发明利用点集分割的思想来调整点集的存储顺序,能够摆脱对网格的依赖,直接根据点集的坐标进行Hilbert排序,从而避免传统Hilbert排序方法的不足,能够有效地解决TIN构建过程中点集的Hilbert排序问题,提高了排序的效率。
【专利说明】
-种面向TIN构建的Hi Ibert排序方法
技术领域
[0001] 本发明设及地理信息系统、地质学、计算机图形学、计算机仿真及虚拟现实等领 域,具体设及一种面向TIN构建的化化ert排序方法。
【背景技术】
[0002] DTM(数字表面模型)是实现地形S维可视化的一种有效途径。栅格和TIN(不规则 S角网)是表示DTM的两种主要数据格式。与栅格方法对格网的周围采样点按照距离远近加 权平均的思想不同,TIN方法采取的是一种更加忠实于原始数据的方法,它几乎完整地保留 了原始数据,按Delaunay原则将采样点直接连成网建立起模型。因此,TIN在地理信息系统、 地质学、计算机图形学、计算机仿真及虚拟现实等领域都有着广泛的应用,是目前DTM常采 用的一种格式。
[0003] 在众多的TIN构建算法中,逐点插入法由于算法简单、占用空间小、便于动态更新 等优点逐渐成为目前最流行的一种算法。起初逐点插入法的效率比较低,为了提高构网的 效率,学者们设计了许多的改进方案。经过先后对逐点插入法不同程度的发展和完善,形成 了 W创建初始包围盒、点定位、空腔扩展、更新=角网为主要流程的逐点插入法。在此基础 上,为了进一步提高逐点插入法的算法效率,学者们的研究焦点主要集中在"点定位"运个 过程上。Sloan提出了划分均匀网格,按网格将点排序后插入的方法。Buchin (Buchin !(.Constructing Del曰UMy tri曰ngul曰tions 曰long space-filling curves[M].Springer Berlin Heide化erg,2009:119-130.)在划分均匀网格排序的基础上提出了依照不同的空 间填充曲线顺序遍历插入网格中点的方法,进一步提高了"点定位"的效率。
[0004] 空间填充曲线是闭合间隔单元I = [0,1巧Ij闭合矩形单元S= [0,1]2的连续映射, 也是所有能够填满二维或更高维空间的连续分形曲线的总称,应用最广泛的空间曲线包括 Modon曲线、Peano曲线和化化ert曲线。HHbed曲线具有良好的空间聚集性及空间连续 性,可W与逐点插入法结合,W提高构网的效率。然而,传统中利用化化ert曲线进行排序的 算法都是面向空间剖分的方法,W栅格辅助进行点集排序,需要将栅格不断的细分至每个 格元中仅包含一个点,然后根据格元的行、列号计算对应的化Ibert编码值,再将栅格中的 点按照化化ert编码顺序输出,进而得到排好序的点集。但是运些方法不适用于TIN构建过 程的排序操作,因为W下两点原因:(1)内存消耗过大。随着数据采集技术的发展,点集的数 据量越来越大,点与点之间的间距越来越小,使得用于辅助的网格往往很庞大,而且细分的 层次非常高,占用极高的内存;(2)排序效率较低。使用网格辅助排序,是一种从网格出发的 排序方法,需要逐个判断每个点所处的网格,运个过程非常费时,使用运种方法,往往排序 的时间比构网的时间还要久。

【发明内容】

[0005] 为了改善传统化化ert排序方法的不足及提高逐点插入法构网的效率,本发明提 出一种全新的Hilbeパ排序方法,在显著降低算法内存需求的情况下,极大的提高了 Hi Aed排序的效率,有利于化化ert排序的推广和应用。
[0006] 本发明采用的技术方案是:
[0007] 一种面向TI咐勾建的化化ert排序方法,其特征在于,包括W下步骤:
[000引(1)读入待排序的二维点集P={pi,iG [0,n)},包括n个点的X坐标和Y坐标,定义 点集的四个方位:西北NW、西南SW、东北肥、东南SE,设初始点集P的方位为西南SW;
[0009] (2)分解点集P W调整点集P内点的存储顺序:根据初始点集P的方位,将点集P分解 为两部分:扣和Pw,具体过程为:如果点集P的方位是西南SW或东北NE,则计算点集P的X坐标 中位数Xo.5,否则计算P的Y坐标中位数Yo.5,利用中位数调整点集P内点的存储顺序,W满足 如下条件:
[0010] 对于西南SW或者东北肥方位,
[0011]
[0012]
[0013]
[0014]
[001引(3)分解点集P似调整点集P冲点的存储顺序:根据点集P的方位,将点集Pw分解为 两个子点集:Pnw和Psw,具体过程为:如果点集P的方位是西南SW或东北肥,则计算点集Pw的Y 坐标中位数Yo.5;若点集P的方位是西北NW或者东南SE,则计算Pw的X坐标中位数姑.5,利用计 算出的中位数调整点集Pw内点的存储顺序,W满足W下条件:
[0016] 对于西南SW或者东北肥方位,
[0017]
[001 引
[0019]
[0020]
[0021] (4)分解点集扣W调整点集扣中点的存储顺序:根据点集P的方位,将点集扣分解为 两个子点集:Pne和Pse,具体过程为:如果点集P的方位是西南SW或东北肥,则计算点集扣的Y 坐标中位数Yo.日;若点集P的方位是西北NW或者东南SE,则计算点集Pe的X坐标中位数Xo.日,利 用计算出的中位数调整点集Pe内点的存储顺序,W满足W下条件:
[0022] 对于西南SW或者东北肥方位,
[0023]
[0024]
[0025]
[00%] 此的
[0027] (5)对于步骤(3)和(4)中分解得到的子点集Pnw、Psw、Pne和PsE,逐个判断其中包含的 点数是否大于1,如果是,则说明该子点集需要继续进行分割,分别W子点集Pnw、Psw、Pne和Pse 作为输入点集P,各点集方位依次为西北NW、西南SW、东北NE和东南SE,递归执行步骤(2)、 (3)、(4)和(5);否则该子点集分解完成;
[002引(6)等待所有子点集分解结束,即完成点集的化化ert排序。
[0029] 点集的方位定义:过点集P的X坐标中位数Xo.5作一条垂直于X轴的直线,过点集P的 Y坐标中位数Yo.5作一条垂直于Y轴的直线,两条直线相交于点p(Xo.5,Yo.5),将点集P的最小 外接矩形MBR分为四个小矩形,每个矩形包含点集P的一个子点集,根据各矩形的方位,将点 集P分为W下四类:
[0030] 左上角矩形的方位为西北NW,对应的子点集是Pnw;
[0031] 左下角矩形的方位为西南SW,对应的子点集是Psw;
[0032] 右上角矩形的方位为东北肥,对应的子点集是Pne;
[0033] 右下角矩形的方位为东南SE,对应的子点集是Pse;
[0034] 其中,子点集Pnw和子点集Pne合并称为点集Pn,子点集Psw和子点集Pse合并称为点集 Ps,子点集扣E和子点集Pse合并称为点集扣,子点集Pnw和子点集Psw合并称为点集Pw。
[0035] 所述点集P的最小外接矩形MBR定义如下:
[0036] xmax=max(pi ? x),iG [0,n)、xmin=min(pi ? x),iG [0,n);
[0037] ymax=max(pi ? y),iG [0,n)、ymin=min(pi ? y),iG [0,n);
[0038] 则由pNE(xmax,ymax),psE(xmax,ymin),pNw(xmin,ymax),psw(xmin,ymin)四个点组 成的矩形就是点集P的最小外接矩形MBR。
[0039] 中位数的定义:对于点集口={口1,16[0,11)},其乂坐标的中位数姑.5是将点集口中的 点按照X坐标从小到大排序,然后取中间点的X坐标值,即X坐标的中位数Xo. 5 = Pn/2 ? X ;其Y 坐标的中位数Yo.5是将点集P中的点按照Y坐标从小到大排序,然后去中间点的Y坐标值,即Y 坐标的中位数Yo.日= Pn/2 ? y。
[0040] 现有的化Ibert排序方法都是面向空间剖分的,W网格不断剖分点集的最小外接 矩形,直到网格中的每个格元里仅包含一个点,最后按照各格元的化化ert编码顺序输出格 元中的点,W实现点集的Hilbert排序。但是,当点集较大时,需要花费较多的时间和内存进 行网格剖分和判断网格中格元与点集中各点的包含关系,严重影响了排序方法的效率,也 约束了 TIN构建的效率。本发明的方法利用点集分割的思想来调整点集的存储顺序,直接根 据点集的坐标进行化化ert排序,从而摆脱对网格的依赖,可W避免传统化化ert排序方法 的不足,能够有效地解决TIN构建过程中点集的化化ert排序问题,提高了排序的效率,并且 脱离了网格的辅助,因而极大降低了算法对于内存的需求,大大减少了不必要的计算开销。
【附图说明】
[0041 ]图1是本发明方法的流程图;
[0042] 图2是本发明实施例的点集方位示意图;
[0043] 图3是本发明实施例的输入点集示意图;
[0044] 图4是本发明实施例的排序结果示意图。
【具体实施方式】
[0045] 下面结合附图和实施例作进一步详细说明。
[0046] 如图1所示,本发明所述的一种面向TIN构建的化化ert排序方法包括W下基本步 骤:
[0047] (1)读入待排序的二维点集P={pi,iG [0,n)},包括n个点的X坐标和Y坐标,定义 点集的四个方位:西北NW、西南SW、东北肥、东南SE,设初始点集P的方位为西南SW;
[0048] 本实施例的初始点集为
[0049] P={(3,3)、(11,1)、(15,3)、(3,15)、(3,7)、(1,13)、(5,11)、(13,7)、(9,9)、(7, 5)、(9,15)、(13,13)、(11,13)、(11,5)},P的默认方位是SW,其分布如附图3所示。
[0050] (2)分解点集P W调整点集P中点的存储顺序。根据初始点集P的方位,将点集P分解 为两部分:扣和Pw;具体包括:如果点集P的方位是西南SW或西南NE,则计算点集P的X坐标中 位数Xo.5,否则计算P的Y坐标中位数Yo.5,利用中位数调整点集P内点的存储顺序,W满足如 下条件:
[0051 ] 对于西南SW或者东北肥方位,
[0化2]
[0化3]
[0化4]
[0化5]
[0化6] 本实施例的P的方位是SW,计算P的X坐标中位数Xq. 5 = 9,此时:
[0057] Pw={(l,13)、(3,3)、(3,15)、(3,7)、(5,ll)、(7,5)、(9,9)}
[005引扣={(9,15)、(11,1)、(11,13)、(11,5)、(13,7)、(13,13)、(15,3)}
[0059] (3)分解点集PwW调整Pw中点的存储顺序。根据点集P的方位,将点集Pw分解为两个 子点集:Pnw和Psw;具体包括:如果点集P的方位是西南SW或东北NE,则计算点集Pw的Y坐标中 位数Yo. 5;若点集P的方位是西北NW或者东南SE,则计算Pw的X坐标中位数Xo. 5,利用计算出的 中位数调整点集Pw内点的存储顺序,W满足W下条件:
[0060] 对于西南SW或者东北肥方位,
[0065] 本实施例的P的方位是SW,计算Pw的Y坐标中位数Yd.日=9,此时:[0066] Pnw={(3,3)、(3,7)、(7,5)}
[0061]
[0062]
[0063]
[0064]
[0067] Psw={(l,13)、(3,15)、(9,9)、(5,ll)}
[0068] (4)分解点集扣W调整扣中点的存储顺序。根据点集P的方位,将点集扣分解为两个 子点集:Pne和Pse;如果点集P的方位是西南SW或东北NE,则计算点集扣的Y坐标中位数机.日;若 点集P的方位是西北NW或者东南SE,则计算点集Pe的X坐标中位数姑.5,利用计算出的中位数 调整点集扣内点的存储顺序,W满足W下条件:
[0069] 对于西南SW或者东北肥方位,
[0070]
[0071]
[0072]
[0073]
[0074] 本实施例的P的方位是SW,计算Pe的Y坐标中位数Yo.日=7,此时:
[0075] Pne= {(9,15)、(11,13)、(13,13)}
[0076] Pse={(11,1)、(11,5)、(13,7)、(15,3)}
[0077] (5)对于步骤(3)和(4)中分解得到的子点集Pnw、Psw、Pne和PsE,逐个判断其中包含的 点数是否大于1,如果是,则说明该子点集需要继续进行分割,分别W子点集Pnw、Psw、Pne和Pse 作为输入点集P,各点集方位依次为西北NW、西南SW、东北NE和东南SE,递归执行步骤(2)、 (3)、(4)和(5);否则该子点集分解完成;
[007引由于此时Pnw、Psw、Pne和Pse包含的点数都大于1,因而分别令P = Pnw、Psw、Pne和Pse,方 位依次为西北NW、西南SW、东北NE和东南SE,递归执行(2)、(3)、(4)和(5)。
[0079] 对于Pnw,其方位为NW,最终排序结果:{(3,3)、(7,5)、(3,7)};
[0080] 对于Psw,其方位为SW,最终排序结果:Kl,13)、(3,15)、巧,11)、(9,9)};
[0081] 对于Pne,其方位为肥,最终排序结果:{(9,15)、(11,13)、(13,13)};
[0082] 对于 Pse,其方位为 SE,最终排序结果:{(13,7)、(11,5)、(11,1)、(15,3)}。
[0083] (6)等待所有子点集分解结束,即完成点集的化化ert排序。
[0084] 将步骤(5)中最后的排序结果按照NW一SW一肥一SE的顺序输出,即实现了对输入 点集的排序,最终的排序结果为:
[0085] {(3,3)、(7,5)、(3,7)、(1,13)、(3,15)、巧,11)、(9,9)、(9,15)、(11,13)、(13,13)、 (13,7)、(11,5)、(11,1)、(15,3)},与附图4中曲线经过点集的顺序一致。
【主权项】
1. 一种面向TIN构建的Hilbert排序方法,其特征在于,包括以下步骤: (1) 读入待排序的二维点集P = {Pi,i e [ 0,η)},包括η个点的X坐标和Y坐标,定义点集的 四个方位:西北NW、西南SW、东北ΝΕ、东南SE,设初始点集Ρ的方位为西南SW; (2) 分解点集Ρ以调整点集Ρ内点的存储顺序:根据初始点集Ρ的方位,将点集Ρ分解为两 部分:Ρε和Pw,具体过程为:如果点集Ρ的方位是西南SW或东北ΝΕ,则计算点集Ρ的X坐标中位 数Χο. 5,否则计算P的Y坐标中位数Υο. 5,利用中位数调整点集P内点的存储顺序,以满足如下 条件: 对于西南SW或者东北NE方位,(3) 分解点集Pw以调整点集Pw中点的存储顺序:根据点集P的方位,将点集Pw分解为两个 子点集:P冊和Psw,具体过程为:如果点集P的方位是西南SW或东北NE,则计算点集Pw的Y坐标 中位数Υο. 5;若点集P的方位是西北NW或者东南SE,则计算Pw的X坐标中位数Χο. 5,利用计算出 的中位数调整点集Pw内点的存储顺序,以满足以下条件: 对于西南SW或者东北NE方位,(4) 分解点集PE以调整点集PE中点的存储顺序:根据点集P的方位,将点集PE分解为两个 子点集:Pne和Pse,具体过程为:如果点集P的方位是西南SW或东北NE,则计算点集P E的Y坐标 中位数Υο. 5;若点集P的方位是西北NW或者东南SE,则计算点集PE的X坐标中位数Χο. 5,利用计 算出的中位数调整点集Ρε内点的存储顺序,以满足以下条件: 对于西南SW或者东北ΝΕ方位,(5) 对于步骤(3)和(4)中分解得到的子点集PNW、Psw、ΡΝΕ和PSE,逐个判断其中包含的点数 是否大于1,如果是,则说明该子点集需要继续进行分割,分别以子点集PNw、Psw、PNE和Pse作为 输入点集P,各点集方位依次为西北NW、西南SW、东北NE和东南SE,递归执行步骤(2)、(3)、 (4)和(5);否则该子点集分解完成; (6)等待所有子点集分解结束,即完成点集的Hilbert排序。2. 根据权利要求1所述的一种面向TIN构建的Hilbert排序方法,其特征在于,点集的方 位定义:过点集P的X坐标中位数Χο. 5作一条垂直于X轴的直线,过点集P的Y坐标中位数Υο. 5作 一条垂直于Y轴的直线,两条直线相交于点Ρ(Χ〇.5,Υ〇.5),将点集P的最小外接矩形MBR分为四 个小矩形,每个矩形包含点集Ρ的一个子点集,根据各矩形的方位,将点集Ρ分为以下四类: 左上角矩形的方位为西北NW,对应的子点集是Pnw; 左下角矩形的方位为西南SW,对应的子点集是PSW; 右上角矩形的方位为东北NE,对应的子点集是PNE; 右下角矩形的方位为东南SE,对应的子点集是PSE; 其中,子点集Pnw和子点集Pne合并称为点集Pn,子点集Psw和子点集Pse合并称为点集Ps,子 点集Pne和子点集Pse合并称为点集Pe,子点集Pm和子点集Psw合并称为点集Pw。3. 根据权利要求1所述的一种面向TIN构建的Hilbert排序方法,其特征在于,所述点集 P的最小外接矩形MBR定义如下: xmax=max(pi .x),ie[〇,n)、xmin=min(pi .x),ie[〇,n); ymax=max(pi .y),ie[〇,n) ,ymin=min(pi .y), i e [〇,n); 贝丨J 由Pne(xmax,ymax),pse(xmax,ymin),pnw(xmin,ymax),psw(xmin,ymin)四个点组成的 矩形就是点集P的最小外接矩形MBR。4. 根据权利要求1所述的一种面向TIN构建的Hilbert排序方法,其特征在于,中位数的 定义:对于点集P= {pi,i e [〇,n)},其X坐标的中位数X〇.5是将点集P中的点按照X坐标从小 到大排序,然后取中间点的X坐标值,即X坐标的中位数Χο. 5 = ρη/2 · X ;其Y坐标的中位数Yo. 5 是将点集Ρ中的点按照Υ坐标从小到大排序,然后去中间点的Υ坐标值,即Υ坐标的中位数Υ〇. 5 =ρη/2 · y〇
【文档编号】G06T17/05GK105957142SQ201610243194
【公开日】2016年9月21日
【申请日】2016年4月19日
【发明人】刘年涛, 周良辰, 林冰仙
【申请人】南京师范大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1