求和面积表(SAT)的3D变体

时间:2013-12-07 18:43:16

标签: algorithm data-structures 3d cumulative-sum

根据维基百科:

summed area table是一种数据结构和算法,用于快速有效地生成网格矩形子集中的值之和。

对于2D空间,可以通过在期望范围内迭代x,y来生成求和区域表,

I(x,y) = i(x,y) + I(x-1,y) + I(x,y-1) - I(x-1,y-1)

矩形角queryA(top-left)B(top-right)C(bottom-right)的{​​{1}}函数可以通过以下方式给出: -

D

我想将上面的内容转换为3D。另请指出是否有任何其他方法/数据结构可用于计算3D空间中的部分和。

1 个答案:

答案 0 :(得分:3)

我不确定,但可以想到以下内容。 (我没有通过维基百科代码)

对于每个坐标(x,y,z),找到从(0,0,0)到此元素的所有元素的总和。
称之为S(0,0,0至x,y,z)或S0(x,y,z) 这可以通过遍历3D矩阵轻松构建。

S0( x,y,z ) =  value[x,y,z] + S0(x-1,y-1,z-1) + 
               S0( x,y,z-1 ) + S0( x, y-1, z ) + S0( x-1, y, z ) 
               - S0( x-1, y-1, z ) - S0( x, y-1, z-1 ) - S0( x-1, y, z-1 )

(基本上是元素值+ S0(x-1,y-1,z-1)+ 3个面(xy,yz,zx))

现在对于每个查询(x1,y1,z1)到(x2,y2,z2),首先转换坐标,使x1,y1,z1为最接近原点的长方体的角,x2,y2,z2为距离原点最远的角落。

S( (x1,y1,z1) to (x2,y2,z2) ) = S0( x2,y2,z2 ) - S0( x2, y2, z1 ) 
                                - S0( x2, y1, z2 ) - S0( x1, y2, z2 )
                                + S0( x1, y1, z2 ) + S0( x1, y2, z1 ) + S0( x2, y1, z1 )
                                - S0( x1, y1, z1 )

(可能会更正)