我有一个粒子分布,即一组3D阵列x
,y
和z
,它们给出了N个粒子的位置。我将我的域划分为单元格,我想编写一个算法,它给出了我在一个单元格中有多少粒子。
我正在寻找一些不会使用太多内存的东西。如果粒子的分布是单维的,那么聪明的想法是将粒子排序为x
。
通过这种方式,我们只需要为每个单元格保存单元格中x
较小的粒子。例如,我知道第7个粒子是属于单元格x
的{{1}}较小的粒子。因此,在单元格i
中,我们必须找到0到7的粒子。
我的问题是:如何将其扩展到3D?或者,我如何构建链接网格?
答案 0 :(得分:1)
这不是一个小问题。您可能希望一般查看R-trees和Spatial databases。
答案 1 :(得分:0)
我认为你的问题可以更容易解决。
制作'细胞'的3D阵列。循环遍历粒子并增加当前粒子所属的单元格值。
示例代码:
cells = int[X][Y][Z]
for p in particles:
cx = cast_to_int((p.x / maxX) * X)
cy = cast_to_int((p.y / maxY) * Y)
cz = cast_to_int((p.z / maxZ) * Z)
cells[cx][cy][cz]++
UPD :仅当所有单元格具有相同的对应大小时才起作用(即x1 = x2 = xn,y1 = y2 = yn ...)。