0

我有一个粒子分布,即一组 3D 数组xyz给出了 N 个粒子的位置。我将我的域划分为单元格,我想编写一个算法,它可以让我在一个单元格中有多少个粒子。我正在寻找不使用太多内存的东西。如果粒子的分布是一维的,那么一个聪明的想法是对粒子进行排序以递减x。这样,我们只需要为每个单元格保存单元格x内较小的粒子即可。例如,我知道第 7 个粒子是x属于 cell的较小粒子i。因此,在 cell 中i,我们必须找到粒子 0 到 7。

我的问题是:如何将其扩展到 3D?或者,我如何构建链接网格?

4

2 回答 2

1

这不是一个小问题。您可能想查看R-trees以及一般的空间数据库

于 2012-03-02T09:12:16.623 回答
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...)。

于 2012-03-02T09:16:18.577 回答