在网格上存储粒子位置的算法(链接网格)

时间:2012-03-02 08:58:20

标签: algorithm mesh particles

我有一个粒子分布,即一组3D阵列xyz,它们给出了N个粒子的位置。我将我的域划分为单元格,我想编写一个算法,它给出了我在一个单元格中有多少粒子。 我正在寻找一些不会使用太多内存的东西。如果粒子的分布是单维的,那么聪明的想法是将粒子排序为x。 通过这种方式,我们只需要为每个单元格保存单元格中x较小的粒子。例如,我知道第7个粒子是属于单元格x的{​​{1}}较小的粒子。因此,在单元格i中,我们必须找到0到7的粒子。

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

2 个答案:

答案 0 :(得分:1)

这不是一个小问题。您可能希望一般查看R-treesSpatial 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 ...)。

相关问题