2016-09-22 129 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