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

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

【发明内容】

[0005] 为了改善传统化ano排序方法的不足及提高逐点插入法构网的效率,本发明提出 一种全新的Peano排序方法,在显著降低算法内存需求的情况下,极大的提高了化ano排序 的效率,有利于化ano排序的推广和应用。
[0006] 本发明的技术方案是:
[0007] 一种面向TIN构建的化ano排序方法,包括W下步骤:
[000引(1)读入待排序的二维点集P={pi,iG [0,n)},包括n个点的X坐标和Y坐标,定义 点集在坐标轴上的排序方向:升序Asc和降序Des,设初始点集P在X轴上的排序方向Dx为升 序Asc,在Y轴上的排序方向Dy为升序Asc;
[0009] (2)分解点集P W调整点集P内点的存储顺序:将点集P分为S部分:Pl、P2和P3,具体
过程为:计算点集?的乂坐标|数^和乂坐标^数^,利用、^|和&!调整点集?内点的存储顺序, W满足如下条件:
[0010] 如果排序方向Dx是升序Asc
[001U 如果排序方向Dx是降序Des
[0012]此时,g
[OOU] (3)分解点集?诚调整点集?1内点的存储顺序:将点集?1分为;个子点集:?11、口12
和Pi3,具体过程为:计算点集Pi的Y坐标I数资!和Y坐标I数y!,利用梦|和^调整点集Pi内点 的存储顺序,W满足如下条件:
[0014]如果排序方向Dy是升序As(
[001引如果排序方向Dy是降序De:
[0016] 此时,设
[0017] (4)分解点集PsW调整点集P2内点的存储顺序:将点集P2分为立个子点集:P21、P22
和P23,具体过程为:计算点集P2的Y坐标J数重言和¥坐标J数皆利用梦|和护吾调整点集P2内点 的存储顺序,W满足如下条件:
[001引如果排序方向Dy是升序As
[0019 ] 如果排序方向Dy是降序De
[0020] 此时,设
[0021] ( 5 )分解点集P3 W调整点集P3内点的存储顺序:将点集P3分为立个子点集:P31、P32 和P33,具体过程为:计算点集P3的Y坐标I数%和Y坐标|数冷利用调整点集P3内点 公.沒: A ? 5v 公 的存储顺序,W满足如下条件:
[0022] 如果排序方向Dy是升序Asc
[0023] 如果排序方向Dy是降序De S
[0024] 此时,设
[00剧 (6)对于步骤(2)、(3)、(4)和(5)中分解得到的子点集?11、?12、?13爪1爪2爪3爪1、 P32和P33,逐个判断其中包含的点数是否大于I,如果是,则说明该子点集需要继续分解,W 该子节点作为输入点集P,递归执行步骤(2)、(3)、(4)和(5),其中每个子点集的划分方向, 依次为:(Dx,Dy)、(!Dx,Dy)、(Dx,Dy)、(Dx,!Dy)、(!Dx,!Dy)、(Dx,!Dy)、(Dx,Dy)、(!Dx,Dy)、(Dx, Dy),括号中!表示对排序方向取反方向;
[0026] (7)等待所有子点集分解结束,即完成点集的化ano排序。
[0027] 步骤(2)中,对于点集口={91,1£[0,11)},其乂坐标的^位数^是将点集口中的点按 照X坐标从小到大排序,然后取第!个点的X坐标值,即X坐标的^立I
取第!个 点的X坐标值,即X坐标的I位I
'其Y坐标的f位数^^是将点集P中的点按照Y坐 标从小到大排序,然后取第f个点的Y坐标值,即Y坐标的I位鑽
取第f个点的Y 坐标值,即Y坐标的!位数
[0028] 现有的Peano排序方法使用网格进行排序不仅会消耗较多的内存,还会导致较低 的排序效率。本发明所述的方法能够直接根据点集的坐标来对点集进行化ano排序,从而摆 脱对网格的依赖。采用本发明的方法,能够有效地解决TIN构建过程中点集的化ano排序问 题,大大减少了不必要的计算开销,进而提高TI咐勾建的算法效率。
【附图说明】
[0029] 图1是本发明方法的流程图;
[0030] 图2是本发明实施例的输入点集示意图;
[0031 ]图3是本发明实施例的排序结果示意图。
【具体实施方式】
[0032] 下面结合附图和实施例作进一步详细说明。
[0033] 如图1所示,本发明所述的一种面向TIN构建的化ano排序方法包括W下基本步骤:
[0034] (1)读入待排序的二维点集P={pi,iG [0,n)},包括n个点的X坐标和Y坐标,定义 点集在坐标轴上的排序方向:Asc(升序)或者Des(降序),设初始点集P在X轴上的排序方向 Dx为Asc,在巧由上的排序方向Dy为Asc;
[0035] 本实施例中,初始点集为
[0036] P={(1,2)、(9,1)、(1,5)、(7,3)、(1,8)、(2,3)、(2,4)、(2,9)、(4,2)、(9,4)、(4, 6)、(4,7)、(8,5)、(5,5)、(6,2)、(6,8)、(1,5)、(8,9)、(9,7)}
[0037] ,其分布如附图2所示。
[003引(2)分解点集PW调整点集P内点的存储顺序。将P分为S部分:Pl、P2和P3;具体包 括:计算点集P的X坐标|数^和乂坐标I数利用^和^调整点集P内点的存储顺序,W满 足如下条件:
[0039] 如果排序方向Dx是升序Asc
[0040] 如果排序方向Dx是降序De S
[OOW 此时,设;
[0042] 本实施例中,计算点集P的X坐标I位数和^立数,得'^ '
[0043] 排序方向Dx是升序Asc, W此来调整点集P内点的存储顺序,得到W下S个子点集:
[0044] Pi={(l,2)、(l,5)、(l,8)、(2,3)、(2,4)、(2,9)}
[0045] P2={(4,2)、(4,6)、(4,7)、(5,5)、(6,2)、(6,8)}
[0046] P3={(7,3)、(8,5)、(8,9)、(9,1)、(9,4)、(9,7)}
[0047] (3)分解点集PiW调整点集Pi内点的存储顺序。将Pi分为立部分:Pii、Pi沸Pi3;具体 包括:计算点集Pi的Y坐标!数》'妻和¥坐标I数皆利用y至和^调整点集Pi内点的存储顺序,W A 公 '公 ? ? :去 满足如下条件:
[004引如果排序方向Dy是升序Asc
[0049] 如果排序方向Dy是降序De S
[0050] 此时,老
[0化1]本实施例中,计算点集Pi的Y坐标、!数和Y坐标f数,得S'V=- S,排序方向Dy 是升序Asc,W此来调整Pi内点的存储顺序,得到W下=个子点集:
[0052] Pn={(l,2)、(2,3)}
[0053] Pi2={(1,5)、(2,4)}
[0054] Pi3={(1,8)、(2,9)}
[00对 (4)分解点集PsW调整点集P2内点的存储顺序。将P2分为立部分:P21、P2沸P23;具体 包括:计算点集?2的¥坐标^数^^和¥坐标^数^,利用^和^调整点集?2内点的存储顺序, 必 巧' 公' W ?交 W满足如下条件:
[0化6] 如果排序方向Dy是升序Asc
[0化7]如果排序方向Dy是降序De S [005引此时,设
[0059] 本实施例中,计算点集P2的Y坐标f数和Y坐标I数,得S'排序方向Dy 是升序Asc,W此来调整P2内点的存储顺序,得到W下=个子点集:
[0060] P2i={(4,7)、(6,8)}
[0061] P22={(4,6)、巧,5)}
[0062] P22={(4,2)、(6,2)}
[0063] ( 5 )分解点集P3 W调整点集P3内点的存储顺序。将P3分为S部分:P31、P3沸P33 ;具体 包括:计算点集P3的Y坐标^?数^和¥坐标|数^^,利用^和^!调整点集P3内点的存储顺序, W满足如下条件:
[0064] 如果排序方向Dy是升序Asc,
[00化]如果排序方向Dy是降序Des,
[0066] 此时,巧
[0067] 本实施例中,计算点集P2的Y坐标J数和Y坐标P义4#^'連,孩'排序方向Dy 是升序Asc,W此来调整P2内点的存储顺序,得到W下=个子点集:
[006引 P3i={(7,3)、(9,1)}
[0069] P32={(8,5)、(9,4)}
[0070] P33={(8,9)、(9,7)}
[00川 (6)对于(2)、(3)、(4)和( 5)中分解得到的子点集口11^12、口13、口21爪2爪3爪1爪2和 P33,逐个判断其中包含的点数是否大于1?如果是,则说明该子点集需要继续分解,W该子节 点作为输入点集P,递归执行(2)、(3)、(4)和(5),其中每个子点集的划分方向,依次为:(Dx, Dy)、(!Dx,Dy)、(Dx,Dy)、^x,!Dy)、(!Dx,!Dy)、(Dx,!Dy)、^x,Dy)、(!Dx,Dy)、(Dx,Dy)
[0072] ,括号中!表示对排序方向取反,例如,如果排序方向Dx是升序Asc,则!Dx表示降序 Des ;
[0073] 本实施例中,由于此时Pll、Pl2、Pl3、P21、P22、P23、P31、P32和P33包含的点数都大于1,因 而分别令P为?11、?12、?13爪1爪2爪3爪1爪2和?33,划分顺序依次为(43。,43。)、(〇63,43。)、 (Asc,Asc)、(Asc,Des)、(Des,Des)、(Asc,Des)、(Asc,Asc)、(Des,Asc)、(Asc,Asc),递归执 行(2)、(3)、(4)和(5)。
[0074] (7)等待所有子点集分解结束,即完成点集的化ano排序。
[00对将步骤(6)中最后的排序结果按照?11、?12、?13、?21、?22、?23、?31、?32和?33的顺序输 出,即实现了对输入点集的排序,最终的排序结果为:
[0076] {(1,2)、(2,3)、(2,4)、(1,5)、(1,8)、(2,9)、(4,7)、(6,8),(5,5)、(4,6)、(4,2)、 (6,2)、(7,3)、(9,1)、(9,4)、(8,5)、(8,9)、(9,7)}。
【主权项】
1. 一种面向TIN构建的Peano排序方法,其特征在于,包括以下步骤: (1)读入待排序的二维点集P = {pi,ie[0,n)},包括η个点的X坐标和Y坐标,定义点集在 坐标轴上的排序方向:升序Asc和降序Des,设初始点集Ρ在X轴上的排序方向Dx为升序Asc, 在Y轴上的排序方向D y为升序Asc; ⑵分解点集P以调整点集P内点的存储顺序:将点集P分为三部分:Pi、P2和P3,具体过程 为:计算点集P的X坐标^数^和X坐标|数^,利用^和^调整点集P内点的存储顺序,以满 足如下条件: 如果排序方向Dx是升序Asc,^i幺麩彡巧4辦: 如果排序方向Dx是降序Des,羚1說巧泛.?:泛灸化.?、义辦^ 此时,?(3) 分解点集?:以调整点集PiR点的存储顺序:将点集Pi*为三个于点集, 具体过程为:计算点集P^Y坐标|数5和¥坐标兰数^,利用和1?调整点集?:内点的存储 汶;S: § S: 5: is: 顺序,以满足如下条件: 如果排序方向Dy是升序Asc. ;s .. s如果排序方向Dy是降序Des,此时,ii(4) 分解点集?2以调整点集P2内点的存储顺序:将点集?2分为三个子点集:P 21、P22和P23, 具体过程为:计算点集P^Y坐标备数$和Y坐标数 Ff,利用11和5调整点集?2内点的存储 顺序,以满足如下条件:(5) 分解点集P3以调整点集P3内点的存储顺序:将点集P3分为三个子点集:P 31、P32和P33, 具体过程为:计算点集Ρ3的Y坐标:蒙数$和Y坐标和1调整点集Ρ 3内点的存储 顺序,以满足如下条件:(6) 对于步骤(2)、(3)、(4)和(5)中分解得到的子点集?11、?12、?13、? 21、?22、?23、?31、?32和 Ρ 33,逐个判断其中包含的点数是否大于1,如果是,则说明该子点集需要继续分解,以该子节 点作为输入点集p,递归执行步骤(2)、( 3)、(4)和(5),其中每个子点集的划分方向,依次为: (Dx,Dy)、(!Dx,Dy)、(D x,Dy)、(Dx,!Dy)、(!Dx,!D y)、(Dx,!〇0、(〇"〇0、(!〇\,〇0、(〇^〇0,括号 中!表示对排序方向取反方向; (7)等待所有子点集分解结束,即完成点集的Peano排序。2.根据权利要求1所述的一种面向TIN构建的Peano排序方法,其特征在于,步骤(2)中, 对于点集P = {pi,i e [0,n)},其X坐标的|位数是将点集P中的点按照X坐标从小到大排 序,然后取第|个点的X坐标值,即X坐标的|位数取第^个点的X坐标值,即X坐 标的|位数、$ = &其Y坐标的^位数是将点集P中的点按照Y坐标从小到大排序,然 后取第|个点的γ坐标值,即γ坐标的^位数:~淡>,取第|个点的γ坐标值,即γ坐标的| 位数$ =^沙.心
【文档编号】G06F17/30GK105955985SQ201610243083
【公开日】2016年9月21日
【申请日】2016年4月19日
【发明人】刘年涛, 周良辰, 林冰仙
【申请人】南京师范大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1