分享
 
 
 

[分形]DLA团簇模型的摸拟

王朝other·作者佚名  2006-03-30
窄屏简体版  字體: |||超大  

[分形]DLA团簇模型的摸拟

EmilMatthew(EmilMatthew@126.com)

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<require num)

{

Init a new particle ar Rmax+d circle’s side;

While(particle is not restored or particle is not out of 2*Rmax)

{

Next pos selection;

Particle move to next step;

Detect whether particle is near the bound of the particles which have been stored.

{

If(“yes”)

Update the map matrix , particle restored.

}

}

}

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)

{

long curNum=0;

int centerX,centerY;

int curX,curY;

int i,j;

long drawColor=34048;

int rMax,d;

float pi;

int** infoMatrix;

bool flag;

float nextPos;

centerX=width/2;centerY=height/2;

/*mem apply*/

infoMatrix=(int**)malloc(sizeof(int*)*height);

for(i=0;i<height;i++)

infoMatrix[i]=(int*)malloc(sizeof(int)*width);

/*map matrix init*/

for(j=0;j<width;j++)

for(i=0;i<height;i++)

infoMatrix[i][j]=UNDRAWED;

/*produce the init particles*/

srand((unsigned int)time (NULL));

i=0;

while(i<10)

{

curX=centerX+(int)eRandom(10);

curY=centerY+(int)eRandom(10);

SetPixel(inHDC,curX,curY,drawColor);

infoMatrix[curX][curY]=DRAWED;

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;

i++;

}

curNum=0;

rMax=75;

d=10;

pi=3.14159;

while(curNum<maxNum)

{

curX=centerX+(rMax+d)*cos(eRandom(180)/pi);

curY=centerY+(rMax+d)*sin(eRandom(180)/pi);

i=0;

flag=false;

while(!flag&&i<20000)

{

nextPos=eRandom(100);

if(nextPos<25)//left

curX--;

else if(nextPos<50)//up

curY--;

else if(nextPos<75)//right

curX++;

else

curY++;

if(curX<=0||curX>=width||curY<=0||curY>=height)

break;

if(infoMatrix[curX][curY]==READY&&(curX-centerX)*(curX-centerX)+(curY-centerY)*(curY-centerY)<=rMax*rMax)

{

SetPixel(inHDC,curX,curY,drawColor);

infoMatrix[curX][curY]=DRAWED;

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;

flag=true;

}

i++;

}

curNum++;

}

}

完成日:06/03/29

附录:

1测试程序下载:

http://emilmatthew.51.net/EmilPapers/06_12DLA/code.rar

若直接点击无法下载(或浏览),请将下载(或浏览)的超链接粘接至浏览器地( 推荐MYIE或GREENBORWSER)址栏后按回车.若不出意外,此时应能下载.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有