2012-03-02 21 views
0

我有一個粒子分佈,即給出N粒子位置的一組3D陣列x,yz。我將我的域劃分爲單元格,我想編寫一個算法,該算法給了我在單元格中有多少個粒子。 我正在尋找不使用太多內存的東西。如果粒子的分佈是單維的,一個聰明的想法是將粒子分類爲x。 以這種方式,我們只需要爲每個單元格保存單元格中較小的x的粒子。例如,我知道第七個粒子是屬於單元格i的較小的x的粒子。因此,在單元格i中,我們必須找到粒子0到7.在網格上存儲粒子位置的算法(鏈式網格)

我的問題是:如何將此擴展到3D?或者,我怎樣才能建立一個鏈式網格?

+0

顆粒質量相同但位置不同。它們被限制在一個3D體積內,讓我們來說一面1的立方體。 – Brian 2012-03-02 09:19:33

回答

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 ...)。

+0

這對計算每個單元格的密度很有用,但這不是我所需要的。我需要知道,在每個單元格中,屬於該單元格的粒子的ID。愚蠢的方式是將這些ID保存在數組中,但這會消耗大量內存。這就是爲什麼我想出了這個鏈式網格的想法。如果以一種明智的方式對顆粒進行分類,那麼就必須在每個單元中只存儲幾條信息,而不是所有顆粒的ID。 – Brian 2012-03-02 09:22:31