发明名称 一种面向TIN构建的Morton排序方法
摘要 本发明涉及一种面向TIN构建的Morton排序方法。该方法包括:读入待排序的二维点集P;分解点集P为两部分:P<sub>N</sub>和P<sub>S</sub>,以调整点集P内点的存储顺序;分别分解点集P<sub>N</sub>和P<sub>S</sub>以调整各点集中点的存储顺序;判断子点集是否分解完成;等待所有子点集分解结束,即完成点集的Morton排序。本发明利用点集分割的思想来调整点集的存储顺序,能够摆脱对网格的依赖,直接根据点集的坐标进行Morton排序,从而避免传统Morton排序方法的不足,能够有效地解决TIN构建过程中点集的Morton排序问题,提高了排序的效率,并且由于脱离了网格的辅助,因而极大降低了算法对于内存的需求,大大减少了不必要的计算开销。
申请公布号 CN105957143A 申请公布日期 2016.09.21
申请号 CN201610243339.3 申请日期 2016.04.19
申请人 南京师范大学 发明人 林冰仙;刘年涛;周良辰
分类号 G06T17/05(2011.01)I;G06T17/30(2006.01)I 主分类号 G06T17/05(2011.01)I
代理机构 南京知识律师事务所 32207 代理人 李媛媛
主权项 一种面向TIN构建的Morton排序方法,其特征在于,包括以下步骤:(1)读入待排序的二维点集P={p<sub>i</sub>,i∈[0,n)},包括n个点的X坐标和Y坐标,定义点集的四个方位:西北NW、西南SW、东北NE、东南SE;(2)分解点集P以调整点集P中点的存储顺序:将点集P分为两部分:P<sub>N</sub>和P<sub>S</sub>,具体过程为:计算点集P的Y坐标中位数Y<sub>0.5</sub>,利用Y<sub>0.5</sub>调整点集P内点的存储顺序,以满足如下条件:<maths num="0001" id="cmaths0001"><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>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="FDA0000968296940000011.GIF" wi="1029" he="99" /></maths>此时,设<img file="FDA0000968296940000012.GIF" wi="819" he="97" />(3)分解点集P<sub>N</sub>以调整点集P<sub>N</sub>中点的存储顺序:将点集P<sub>N</sub>按西北NW和东北NE方位分解为两个子点集P<sub>NW</sub>和P<sub>NE</sub>,具体过程为:计算点集P<sub>N</sub>的X坐标中位数X<sub>0.5</sub>,利用X<sub>0.5</sub>调整P<sub>N</sub>内点的存储顺序,以满足如下条件:<maths num="0002" id="cmaths0002"><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>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="FDA0000968296940000013.GIF" wi="1031" he="99" /></maths>此时,设<img file="FDA0000968296940000014.GIF" wi="875" he="99" />(4)分解点集P<sub>S</sub>以调整点集P<sub>S</sub>中点的存储顺序:将点集P<sub>S</sub>按西南SW和东南SE方位分解为两个子点集P<sub>SW</sub>和P<sub>SE</sub>,具体过程为:计算点集P<sub>S</sub>的X坐标中位数X<sub>0.5</sub>,利用X<sub>0.5</sub>调整P<sub>S</sub>内点的存储顺序,以满足如下条件:<maths num="0003" id="cmaths0003"><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><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="FDA0000968296940000015.GIF" wi="1078" he="95" /></maths>此时,<img file="FDA0000968296940000016.GIF" wi="913" he="97" />(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,递归执行步骤(2)、(3)(4)和(5);否则该子点集分解完成;(6)等待所有子点集分解结束,即完成点集P的Morton排序。
地址 210097 江苏省南京市鼓楼区宁海路122号