[
分形]dla
團簇模型的摸擬
emilmatthew(
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 給定遞迴出口。遞迴設計使程式簡潔,也體現了設計思路在整體 區域性上結合的嚴謹,但仍不提倡程式設計使用,因為其執行效率低且占用棧的空間問題突出。作為解決思路的一種方式還是具有魅力。分形的自我相似,自我複製和...