主权项 |
一种面向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>≤</mo><msub><mi>X</mi><mn>0.5</mn></msub><mo>≤</mo><msub><mi>p</mi><mi>j</mi></msub><mo>.</mo><mi>x</mi><mo>,</mo><mi>i</mi><mo>∈</mo><mo>[</mo><mn>0</mn><mo>,</mo><mfrac><mi>n</mi><mn>2</mn></mfrac><mo>-</mo><mn>1</mn><mo>]</mo><mo>,</mo><mi>j</mi><mo>∈</mo><mo>[</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>∈</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>≤</mo><msub><mi>Y</mi><mn>0.5</mn></msub><mo>≤</mo><msub><mi>p</mi><mi>j</mi></msub><mo>.</mo><mi>y</mi><mo>,</mo><mi>i</mi><mo>∈</mo><mo>[</mo><mn>0</mn><mo>,</mo><mfrac><mi>n</mi><mn>4</mn></mfrac><mo>-</mo><mn>1</mn><mo>]</mo><mo>,</mo><mi>j</mi><mo>∈</mo><mo>[</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>∈</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>≥</mo><msub><mi>Y</mi><mn>0.5</mn></msub><mo>≥</mo><msub><mi>p</mi><mi>j</mi></msub><mo>.</mo><mi>y</mi><mo>,</mo><mi>i</mi><mo>∈</mo><mo>[</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>]</mo><mo>,</mo><mi>j</mi><mo>∈</mo><mo>[</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>∈</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排序。 |