2016-09-22 94 views
1

我需要從平面上的2個座標x,y中計算一個點上的Z指數(Morton)。帶有越界限制的Z-索引

傳統上這只是通過位交織來解決的。

但是我有界限,我希望點的z-index只在活動區域​​內增加morton計數,並在外部跳過計數。

需要明確的是,在一個4x4正方形典型的Z順序是:

| 0 1 4 5 | 
| 2 3 6 7 | 
| 8 9 12 13 | 
| 10 11 14 15 | 

但是,如果我有一個3x3的活動區域,我想這樣來計算的指標:

| 0 1 4 x | 
| 2 3 5 x | 
| 6 7 8 x | 
| x x x x | 

正如你所看到的00-11四分滿,02-13跳過有效區域以外的2個點的計數,20-31和22-33相同。

重要提示:我想不做迭代。

這個問題有沒有已知的解決方案?

+0

是你能找到這個解決方案? – kanna

+0

沒有,對不起...... – Michele

+0

我能夠得到https://fgiesen.wordpress.com/2009/12/13/decoding-morton-codes/ – kanna

回答

-2

我能得到答案的問題上https://fgiesen.wordpress.com/2009/12/13/decoding-morton-codes/

要處理的矩形區域,集齊所有尺寸最接近2的功率和線性包長軸。

例如,在endcoding矩形5x4的點(2,3)如下,

四捨五入至5×4的2個結果4,4即3和2位

編碼點2,3 最近的電源首先交叉0b010的2位,0b11得到0b1110,x維的第3位變成結果的第5位。

編碼4,2, 0b100時,0b11變得0b11010

爲了找到3×3區域的z順序,使用以上上述方法 而生成地圖跳過任何點的反向查找逆映射的四輪驅動區域那落在3x3區域之外。

映射是這樣的

(0,0) -> (0,0) 
(0,1) -> (1,0) 
(0,2) -> (0,1) 
(0,3) -> (1,1) 
(1,0) -> (2,0) 
(1,2) -> (2,1) 
(2,0) -> (0,2) 
(2,1) -> (1,2) 
(3,0) -> (2,2) 

enter image description here Python代碼可能是有用的,https://gist.github.com/kannaiah/4eb936b047a987b32555b2642a0979f7