2014-01-27 110 views
0

我正在編碼以模擬解決方案環境中球體的增長。我正在這樣做。使用隨機數創建羣集

  1. 創建空間並將細胞置於中心作爲種子。

    pSpace = new char[nXRange * nYRange * nZRange]; 
    for (int i = 0; i < nZRange; i++) 
    for (int j = 0; j < nYRange; j++) 
    for (int k = 0; k < nXRange; k++) 
        pSpace[i * nXRange * nYRange + j * nXRange + k] = 0; 
    pSpace[nXRange * nYRange * nZRange/2 + nXRange * nYRange/2 + nXRange/2] = 1; 
    
  2. 在解決方案中創建一個單元格。單元格的位置由隨機數創建。

    int nXPostion = (int)(((float)rand()/RAND_MAX) * (nXRange - 1)); 
    int nYPostion = (int)(((float)rand()/RAND_MAX) * (nYRange - 1)); 
    int nZPostion = (int)(((float)rand()/RAND_MAX) * (nZRange - 1)); 
    
  3. 計算用於創建新的小區的鄰居cell.Six的電位的變化進行檢查爲左(L),右(R),前(F),後面(B),上(T)和底部(B *)。如果新細胞的鄰居是圖中L的舊細胞,則電勢的變化是PA2A,否則,如果它不是老細胞,而是溶液,則爲R,F,B,T和B *這個數字,它是PA2S。用新的細胞的創建改變了PCREATE的潛力。因此,潛在的變化是

    fPotential = PCREATE + P(Left) + p(Right) + p(Front) + p(Behind) + p(Top) + p(Bottom); 
    
  4. 使用隨機數來比較潛在的變化如下。如果隨機數大於潛在變化的指數,則創建一個新的單元,否則取消。

理論上,球體會在種子周圍生長。但是,在我的實驗中,羣集的形​​狀是不規則的。附加的圖像是50000個單元的羣集。任何人都可以給我一些意見。它與隨機數的產生有關嗎?謝謝。

a cluster created around a seed with random number

XY plane of cluster

XZ plane of cluster

Interplate in process 3

+0

這可能是一個愚蠢的問題,但你爲什麼認爲你發佈的形狀是「不規則的」?我看起來你的細胞集落的中心是260,260,260,並且細胞集落在x/y/z方向大致在230..290附近傳播。這幾乎是一個球體? –

+0

你說得對。集羣的範圍看起來正確。但是,羣集包絡的形狀不是一個圓圈。你可以從集羣的xy和xz平面看到。集羣表面不光滑。我創造了50000個細胞。 – HXGuo

+0

你有沒有理由不使用多維數組?例如'一[X] [Y] [Z]'。它會提高你的代碼的可讀性,並減少我們的指數出錯的可能性。 – Richard

回答

2

我對這次兩個念頭。

第一個:您正在使用的直線網格存在困難。也就是說,沒有深入研究你的代碼,x軸,y軸或z軸的增長速度可能與沿着對角軸的增長率不同。

這個問題很難解決。如果你允許D-26連接(中央單元連接到它周圍的所有單元的立方體),那麼你如何解釋到對角線單元的(稍微)更長的距離?如果你只允許x軸,y軸和z軸的增長,那麼你如何解釋這樣一個事實,即對角線方向上的單元現在需要比它應該更長的時間?

這可能解釋了一些模糊性。

第二個:現在我們使用「it 看起來不規則」的度量。但是真的是?我們需要的是一個很好的統計檢驗,它是如何不規則的,以及我們預期的不規則程度。當然,你不會指望你的blob的邊緣是完全球形的,畢竟這是一個隨機過程。