分形 DLA團簇模型的摸擬

2021-04-06 11:49:40 字數 2158 閱讀 6097

[

分形]dla

團簇模型的摸擬

emilmatthew(

[email protected])

1前言

:

dla

團簇模型是分形成長中的乙個很易於實現的模型

.(當然啦,背後的理論工作是非常高有難度的,涉及到代數,泛函分析,非線性偏微分方程等知識。我們就拿著別人的研究出的成果,來感受一下其中的美妙吧j)

團簇模型最初是

80年代初

t.a.witten

和l.m.sander

在研究懸浮在溶液或大氣中的金屬粉末,煤灰和煙塵等微粒的無規擴散凝聚過程中得出的研究成果.

2dla

模型的摸擬規則

: a

在某個規定好大小的畫布的中心處

o隨機的產生少量粒子.

b在以中心

o為圓心,以

rmax

為半徑的圓周的周圍(比

rmax稍大,

如rmax+d處)

隨機的生成新的粒子。新粒子隨即進行隨機的遊走

------

上下左右四個方向。

如果遊走至原來粒子的附近

(即乙個已吸收粒子的上下左右的任何乙個方位

),則該粒子認為被吸收。

如果遊戲的粒子走出了距離中心點

2*rmax

的距離,則刪去這個粒子.

c當產生粒子數少於規定的最大粒子數時,則重複b.

採用

5000

個粒子總數,畫布大小為

400*400

的模擬效果如下:

3程式整體設計

:

while(test particle num }

}4

關鍵**

:

4.1

新粒子是否被吸引的演算法

:

這裡,關於如何判定粒子被吸引的演算法值得一提:

關於粒子在圖上的分布情況,可以用乙個二維矩陣進行儲存.

矩陣上的每個位置的取值與畫布上的各個畫素一一對應

,一共可以取三個值

undrawed , ready , drawed

分別表示該點的狀況是未著點,邊界點,已著點.

對於某個確認新吸收的粒子,設其位置座標為

(curx,cury),

則其周圍的粒子的值的情況可以用下面這個判定來改變:

if(infomatrix[curx-1][cury]!=drawed)

infomatrix[curx-1][cury]=ready;

if(infomatrix[curx][cury-1]!=drawed)

infomatrix[curx][cury-1]=ready;

if(infomatrix[curx+1][cury]!=drawed)

infomatrix[curx+1][cury]=ready;

if(infomatrix[curx][cury+1]!=drawed)

infomatrix[curx][cury+1]=ready;

這樣的話,對於以後生成的新粒子是否已處於被吸收的位置的判定,只需要用一句:

if(infomatrix[curx][cury]==ready&&

在界內)

即可

,判定是否被吸收演算法的複雜度被控制在常數級.

4.2模擬程式**

:

void dlatest(long maxnum,int width,int height,hdc inhdc)

curnum=0;

rmax=75;

d=10;

pi=3.14159;

while(curnum

i++;

}

curnum++;

}

}

完成日

:

06/03/29

附錄

或瀏覽)

(或瀏覽

)的超連結粘接至瀏覽器地(

推薦myie

或greenborwser

)址欄後按回車..

lammps案例 團簇融化過程模擬案例學習

分享乙個團簇融化的lammps模擬案例,由carsten svaneborg博士編寫。模擬單位為lj,2d模擬體系,週期性邊界條件,力場為最常見的lj力場。模擬思路 1 設定乙個4040的模擬盒子,在盒子 設定乙個2020的區域,在中間區域內隨機填充原子。2 能量最小化消除隨機原子的重疊。3 設定l...

ACwing 98 分形之城 分形

題面來自acwing 城市的規劃在城市建設中是個大問題。不幸的是,很多城市在開始建設的時候並沒有很好的規劃,城市規模擴大之後規劃不合理的問題就開始顯現。而這座名為 fractal 的城市設想了這樣的乙個規劃方案,如下圖所示 當城區規模擴大之後,fractal 的解決方案是把和原來城區結構一樣的區域按...

分形《二》分形的遞迴演算法

遞迴演算法是把問題轉化為規模縮小了的同類問題的子問題。1 核心的子問題演算法。2 遞迴呼叫。3 給定遞迴出口。遞迴設計使程式簡潔,也體現了設計思路在整體 區域性上結合的嚴謹,但仍不提倡程式設計使用,因為其執行效率低且占用棧的空間問題突出。作為解決思路的一種方式還是具有魅力。分形的自我相似,自我複製和...