matlab imshow加画网格,matlab能生成随机行走网格吗? - 仿真模拟 - 小木虫 - 学术 科研 互动社区...

CODE:

function growth

% 随机生长的步骤如下:1) 建立材料生长的初始网格,并设定所有网格材料皆为主相;

% 2) 定义生长相的生长核分布概率数,Cd,其大小不大于此生长相的体积分数。对系

% 统网格的每个单元采用在(0,1)内均匀分布的随机函数赋随机数,其值若小于Cd,则

% 认为此单元为生长相的一个生长核。其次,对每一个生长核,使其从各个方向上向其

% 周围临近网格单元扩张,生长时,每一个方向上需设定一个方向增长概率数,Di,

% 下标i代表方向。每一个生长核,其周围各个单元均会被赋值一个随机数,其值若不

% 大于该方向上的方向增长概率数,则此单元同样成为一个新的生长相。第三,重复步

% 骤二直至此生长相的体积分数到达其给定值

%======设定初值=============

clc;clear;

Cd=0.01;%生长核分布概率数

Vr=0.4;%生长相的体积分数

kn=250;

p=[1/8 1/8 1/8 1/8 1/4 1/4 1/4 1/4];%方向增长概率数

A=rand(kn,kn);%初始网格kn×kn

A(find(A<=Cd))=0;%黑色,生长核

A(find(A>Cd))=1;%白色

imshow(A,'InitialMagnification','fit')%初始图像

Vs=0;%体积分数

k=0;%迭代步骤

N=kn*kn;%格点数

[x,y]=find(A==0);

Ixy=sub2ind([kn,kn],x,y) % 转化脚标为索引

gn=length(Ixy);

Vs=gn/N%体积分数

%===========================

while Vs

xL=x-1;xR=x+1;

xL(xL==0)=1;% 对近邻进行周期性边界条件处理

xR(xR==kn+1)=kn;% 对近邻进行周期性边界条件处理

yD=y-1;yU=y+1;

yD(yD==0)=1;% 对近邻进行周期性边界条件处理

yU(yU==kn+1)=kn;% 对近邻进行周期性边界条件处理

InE=sub2ind([kn,kn],xR,y); % 右方转化脚标为索引

InS=sub2ind([kn,kn],x,yD); % 下方转化脚标为索引

InW=sub2ind([kn,kn],xL,y); % 左方转化脚标为索引

InN=sub2ind([kn,kn],x,yU); % 上方转化脚标为索引

InEN=sub2ind([kn,kn],xR,yU); % 右上方转化脚标为索引

InES=sub2ind([kn,kn],xR,yD); % 右下方转化脚标为索引

InWS=sub2ind([kn,kn],xL,yD); % 左下方转化脚标为索引

InWN=sub2ind([kn,kn],xL,yU); % 左上方转化脚标为索引

%===这里没有用函数的方法写,程序较长,另外斜方向上的生长没有写,可参考水平和垂直方向上的写法

CInE=setdiff(InE,Ixy); En=rand(1,length(CInE));[i,j]=find(En<=p(5));pE=sub2ind([1,length(CInE)],i,j);

A(CInE(pE))=0;

[x,y]=find(A==0);

Ixy=sub2ind([kn,kn],x,y);

CInS= setdiff(InS,Ixy);Sn=rand(1,length(CInS));[i,j]=find(Sn<=p(6));pS=sub2ind([1,length(CInS)],i,j);

A(CInS(pS))=0;

[x,y]=find(A==0);

Ixy=sub2ind([kn,kn],x,y);

CInW= setdiff(InW,Ixy);Wn=rand(1,length(CInW));[i,j]=find(Wn<=p(7));pW=sub2ind([1,length(CInW)],i,j);

A(CInW(pW))=0;

[x,y]=find(A==0);

Ixy=sub2ind([kn,kn],x,y);

CInN= setdiff(InN,Ixy);Nn=rand(1,length(CInN));[i,j]=find(Nn<=p(8));pN=sub2ind([1,length(CInN)],i,j);

A(CInN(pN))=0;

[x,y]=find(A==0);

Ixy=sub2ind([kn,kn],x,y);

[x,y]=find(A==0);

Ixy=sub2ind([kn,kn],x,y);

gn=length(Ixy);

Vs=gn/N %体积分数

k=k+1

imshow(A,'InitialMagnification','fit')%初始图像

pause(0.1)

end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值