发明名称 一种面向TIN构建的Hilbert排序方法
摘要 本发明涉及一种面向TIN构建的Hilbert排序方法。该方法包括:(1)读入待排序的二维点集P;(2)分解点集P以调整点集P内点的存储顺序;(3)分解点集P<sub>W</sub>以调整点集P<sub>W</sub>中点的存储顺序;(4)分解点集P<sub>E</sub>以调整点集P<sub>E</sub>中点的存储顺序;(5)判断子点集是否分解完成;(6)等待所有子点集分解结束,即完成点集的Hilbert排序。本发明利用点集分割的思想来调整点集的存储顺序,能够摆脱对网格的依赖,直接根据点集的坐标进行Hilbert排序,从而避免传统Hilbert排序方法的不足,能够有效地解决TIN构建过程中点集的Hilbert排序问题,提高了排序的效率。
申请公布号 CN105957142A 申请公布日期 2016.09.21
申请号 CN201610243194.7 申请日期 2016.04.19
申请人 南京师范大学 发明人 刘年涛;周良辰;林冰仙
分类号 G06T17/05(2011.01)I;G06T17/30(2006.01)I 主分类号 G06T17/05(2011.01)I
代理机构 南京知识律师事务所 32207 代理人 李媛媛
主权项 一种面向TIN构建的Hilbert排序方法,其特征在于,包括以下步骤:(1)读入待排序的二维点集P={p<sub>i</sub>,i∈[0,n)},包括n个点的X坐标和Y坐标,定义点集的四个方位:西北NW、西南SW、东北NE、东南SE,设初始点集P的方位为西南SW;(2)分解点集P以调整点集P内点的存储顺序:根据初始点集P的方位,将点集P分解为两部分:P<sub>E</sub>和P<sub>W</sub>,具体过程为:如果点集P的方位是西南SW或东北NE,则计算点集P的X坐标中位数X<sub>0.5</sub>,否则计算P的Y坐标中位数Y<sub>0.5</sub>,利用中位数调整点集P内点的存储顺序,以满足如下条件:对于西南SW或者东北NE方位,<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><msub><mi>p</mi><mi>i</mi></msub><mo>.</mo><mi>x</mi><mo>&le;</mo><msub><mi>X</mi><mn>0.5</mn></msub><mo>&le;</mo><msub><mi>p</mi><mi>j</mi></msub><mo>.</mo><mi>x</mi><mo>,</mo><mi>i</mi><mo>&Element;</mo><mo>&lsqb;</mo><mn>0</mn><mo>,</mo><mfrac><mi>n</mi><mn>2</mn></mfrac><mo>-</mo><mn>1</mn><mo>&rsqb;</mo><mo>,</mo><mi>j</mi><mo>&Element;</mo><mo>&lsqb;</mo><mfrac><mi>n</mi><mn>2</mn></mfrac><mo>+</mo><mn>1</mn><mo>,</mo><mi>n</mi><mo>)</mo><mo>,</mo><mi>p</mi><mo>&Element;</mo><mi>P</mi><mo>;</mo></mrow>]]></math><img file="FDA0000968297460000011.GIF" wi="1053" he="97" /></maths>对于西北NW方位,<img file="FDA0000968297460000012.GIF" wi="1027" he="95" />对于东南SE方位,<img file="FDA0000968297460000013.GIF" wi="1027" he="99" />此时,设<img file="FDA0000968297460000014.GIF" wi="827" he="98" />(3)分解点集P<sub>W</sub>以调整点集P<sub>W</sub>中点的存储顺序:根据点集P的方位,将点集P<sub>W</sub>分解为两个子点集:P<sub>NW</sub>和P<sub>SW</sub>,具体过程为:如果点集P的方位是西南SW或东北NE,则计算点集P<sub>W</sub>的Y坐标中位数Y<sub>0.5</sub>;若点集P的方位是西北NW或者东南SE,则计算P<sub>W</sub>的X坐标中位数X<sub>0.5</sub>,利用计算出的中位数调整点集P<sub>W</sub>内点的存储顺序,以满足以下条件:对于西南SW或者东北NE方位,<maths num="0002" id="cmaths0002"><math><![CDATA[<mrow><msub><mi>p</mi><mi>i</mi></msub><mo>.</mo><mi>y</mi><mo>&le;</mo><msub><mi>Y</mi><mn>0.5</mn></msub><mo>&le;</mo><msub><mi>p</mi><mi>j</mi></msub><mo>.</mo><mi>y</mi><mo>,</mo><mi>i</mi><mo>&Element;</mo><mo>&lsqb;</mo><mn>0</mn><mo>,</mo><mfrac><mi>n</mi><mn>4</mn></mfrac><mo>-</mo><mn>1</mn><mo>&rsqb;</mo><mo>,</mo><mi>j</mi><mo>&Element;</mo><mo>&lsqb;</mo><mfrac><mi>n</mi><mn>4</mn></mfrac><mo>+</mo><mn>1</mn><mo>,</mo><mfrac><mi>n</mi><mn>2</mn></mfrac><mo>)</mo><mo>,</mo><mi>p</mi><mo>&Element;</mo><mi>P</mi><mo>;</mo></mrow>]]></math><img file="FDA0000968297460000015.GIF" wi="1019" he="97" /></maths>对于西北NW方位,<img file="FDA0000968297460000021.GIF" wi="1029" he="99" />对于东南SE方位,<img file="FDA0000968297460000022.GIF" wi="1034" he="95" />此时<img file="FDA0000968297460000023.GIF" wi="875" he="99" />(4)分解点集P<sub>E</sub>以调整点集P<sub>E</sub>中点的存储顺序:根据点集P的方位,将点集P<sub>E</sub>分解为两个子点集:P<sub>NE</sub>和P<sub>SE</sub>,具体过程为:如果点集P的方位是西南SW或东北NE,则计算点集P<sub>E</sub>的Y坐标中位数Y<sub>0.5</sub>;若点集P的方位是西北NW或者东南SE,则计算点集P<sub>E</sub>的X坐标中位数X<sub>0.5</sub>,利用计算出的中位数调整点集P<sub>E</sub>内点的存储顺序,以满足以下条件:对于西南SW或者东北NE方位,<maths num="0003" id="cmaths0003"><math><![CDATA[<mrow><msub><mi>p</mi><mi>i</mi></msub><mo>.</mo><mi>y</mi><mo>&GreaterEqual;</mo><msub><mi>Y</mi><mn>0.5</mn></msub><mo>&GreaterEqual;</mo><msub><mi>p</mi><mi>j</mi></msub><mo>.</mo><mi>y</mi><mo>,</mo><mi>i</mi><mo>&Element;</mo><mo>&lsqb;</mo><mfrac><mi>n</mi><mn>2</mn></mfrac><mo>,</mo><mfrac><mrow><mn>3</mn><mi>n</mi></mrow><mn>4</mn></mfrac><mo>-</mo><mn>1</mn><mo>&rsqb;</mo><mo>,</mo><mi>j</mi><mo>&Element;</mo><mo>&lsqb;</mo><mfrac><mrow><mn>3</mn><mi>n</mi></mrow><mn>4</mn></mfrac><mo>+</mo><mn>1</mn><mo>,</mo><mi>n</mi><mo>)</mo><mo>,</mo><mi>p</mi><mo>&Element;</mo><mi>P</mi><mo>;</mo></mrow>]]></math><img file="FDA0000968297460000024.GIF" wi="1074" he="95" /></maths>对于西北NW方位,<img file="FDA0000968297460000025.GIF" wi="1075" he="94" />对于东南SE方位,<img file="FDA0000968297460000026.GIF" wi="1077" he="96" />此时<img file="FDA0000968297460000027.GIF" wi="906" he="99" />(5)对于步骤(3)和(4)中分解得到的子点集P<sub>NW</sub>、P<sub>SW</sub>、P<sub>NE</sub>和P<sub>SE</sub>,逐个判断其中包含的点数是否大于1,如果是,则说明该子点集需要继续进行分割,分别以子点集P<sub>NW</sub>、P<sub>SW</sub>、P<sub>NE</sub>和P<sub>SE</sub>作为输入点集P,各点集方位依次为西北NW、西南SW、东北NE和东南SE,递归执行步骤(2)、(3)、(4)和(5);否则该子点集分解完成;(6)等待所有子点集分解结束,即完成点集的Hilbert排序。
地址 210097 江苏省南京市鼓楼区宁海路122号